[C++语言] 多个头文件的编写的注意事项 左手的ㄟ右手 2021-12-22 18:59 610阅读 0赞 今天终于完成了算法设计作业的收尾工作,过程中编写了许多头文件,遇到了不少坑,这里记下来提醒自己,及时复盘总结提高。 注意点1: **类声明部分写入.h头文件(header),类实现写入.cpp源文件(source)。** 如果声明和实现都写入头文件,也能通过编译,但不是好的编程习惯。 在Dev中,将多个头文件和源文件添加到同一个项目中编译,而不要简单地拖动到同一个文件夹里。 如果你只是放在同一个文件夹里,那就只能把类实现也写进头文件里了。 student.h: //student.h #ifndef Student_H #define Student_H #include <string> using std::string; class Student{ private: string name; int age; double grade; public: Student(string _name, int _age, double _grade){ name = _name; age = _age; grade = _grade; } string getName(); int getAge(); double getGrade(); void setName(string); void setAge(int); void setGrade(double); void show(); }; #endif student.cpp: //student.cpp #include "student.h" #include <iostream> using std::cout; using std::endl; string Student::getName(){ return name; } int Student::getAge(){ return age; } double Student::getGrade(){ return grade; } void Student::setName(string _name){ name = _name; } void Student::setAge(int _age){ age = _age; }; void Student::setGrade(double _grade){ grade = _grade; } void Student::show(){ cout << "学生信息如下:" << endl << "姓名:" << name << endl << "年龄" << age << endl << "分数" << grade << endl; } 编译student.cpp时会警告 undefined refernce to 'WinMain' 和 'ld returned 1 exit status',这是没有关系的,保证你的项目里某个.cpp里有main()函数就好了。 main.cpp //main.cpp #include "student.h" int main() { Student s1("Zhang", 18, 80.5); s1.show(); s1.setGrade(90.0); s1.show(); return 0; } 运行结果: 学生信息如下: 姓名:Zhang 年龄18 分数80.5 学生信息如下: 姓名:Zhang 年龄18 分数90 一定要集成在Dev项目里! 注意点2: **为头文件添加预编译头\#ifndef,防止同一头文件被嵌套导入时发生问题。** 例如,student.h可添加如下代码: #ifndef Student_H #define Student_H #endif 第一次include头文件studnt.h时,由于此前并未define过Student\_H,所以程序将执行\#ifndef Student\_H和\#endif之间的部分(你的类声明部分),同时define了Student\_H 当头文件Student\_H被嵌套include、重复include时,由于Student\_H之前已经被define过了,\#ifndef Student\_H以下的代码就不会被执行,避免了重复声明造成的冲突。 注意点3: **公私分明。类的接口部分、构造函数、析构函数作为公有部分(public),其余的尽可能作为私有部分(private)。** 如果是为了刷OJ,快速验证某个idea或完成某个小任务,可以全部用public,但不是好的工程习惯。 protected暂不作说明。 注意点4: **编写类时,可从公有/私有、数据/函数的角度考虑各个成员。** 注意点5: 工程上用using std::cout; 比using namespace std;更好,避免名称空间污染 如果是为了刷OJ,快速验证某个idea或完成某个小任务,用using namespace std;无可厚非。 以下是常用的using指令,要先include对应的头文件。 #include <iostream> using std::cin; using std::cout; using std::endl; #include <vector> using std::vector; #include <string> using std::string; 注意点6: 构造函数传参可用\_value,类成员数据用value,以示区分
还没有评论,来说两句吧...