1, class 和 struct 都可以定义一个类,区别是两者在所支持的 默认信息隐藏方式不同:c++ 中默认为 private 类型,而 struct 中默认为 public 类型。
2,类的私有成员具有 类范围 性质,仅能由类的成员函数访问。
3,类成员函数的定义有两种方式:(a)在类声明的时候定义,就是在类内部定义(该方式称为 inline 方式)也可以在类中声明该函数时候加上 inline 关键字,强制转换为 inline 类型。(b)在类内声明,在类外定义,定义该函数时,需要使用 类解析符(:)。因为其它的类也可能会使用(定义)这些函数。
4,一般把类的声明放到一个单独的头文件中,这样当任何地方需要使用这个类的时候,通过 #include 宏就可以把类的声明包含进来;把类的定义单独放在一个文件中,例如 person.cpp,这种文件我们称为 实现文件。
5,除非迫不得已,一般来说应该采用引用方式进行对象的传递和返回,而不要采用传值的方式来进行。因为通过传值方式和返回对象时会降低效率并将面临对象间的拷贝操作,从而使数据增大,浪费内存。
6,一般来说,不要以引用方式在函数中返回一个 auto 局部变量。因为返回时,该对象已经不存在,调用者将引用一个不存在的对象而出错。
1 C& g() { 2 C c; 3 c.set(123); 4 return c; // Error: c goes out of existence when g exist; 5 }
7,const 的用法:(a)参数对象的引用中使用:通常来说,如果一个对象通过引用方式传到函数中,而函数 f 又不会改变该对象的状态,那么,最好将参数标记为 const,可以预防对参数的误写,有些编译器还可以对这种情况进行优化。(b)const 成员函数:如果一个成员函数不需要直接或间接来改变该函数所属对象的任何数据成员,最好把这个成员函数标记为 const。这种类型的函数称为只读函数。(c)const 类型的返回值:不允许通过引用来修改返回值。
1 class Emp { 2 public: 3 Emp() { 4 name = "alex"; 5 cout<<"default Create obj"<<endl; 6 } 7 Emp(const string& n) { // 不会改变 n 的状态 8 name = n; 9 cout<<"Create obj1"<<endl; 10 } 11 Emp(const char *name) { 12 this->name = name; 13 cout<<"Create obj2"<<endl; 14 } 15 private: 16 string name; 17 };
1 class B { 2 public: 3 void set(int n) { num = n; } 4 int get() const { return num; } // 不改变任何数据成员 5 private: 6 int num; 7 };