关于类的一些遗漏的点。
1 #include <iostream> 2 #include <typeinfo> 3 #include <string> 4 using namespace std; 5 6 class Person { 7 //设为友元,可访问类的非公有成员 8 friend void read(istream &is, Person &p); 9 friend void print(ostream &os, Person &p); 10 private: 11 string name; 12 string address; 13 mutable int count = 0;//突破界限之const函数改值 14 15 public: 16 static string t; 17 Person() = default; 18 Person(string _name, string _address) { 19 name = _name; 20 address = _address; 21 } 22 string getName() const { 23 ++ count;//mutable 可变值 24 t = "blue"; //static 也可变 25 return this->name; 26 } 27 string getAddress() const { 28 return this->address; 29 } 30 int getCount() const { 31 return this->count; 32 } 33 }; 34 35 string Person::t = "yellow"; 36 37 //read the obj 38 void read(istream &is, Person &p) 39 { 40 is >> p.name >> p.address; 41 } 42 43 //print the obj 44 void print(ostream &os, Person &p) 45 { 46 os << p.name << " " << p.address; 47 } 48 49 int main() 50 { 51 Person yoci("nan", "Shan'an-Xi"); 52 cout << yoci.getName() << endl; 53 cout << yoci.getAddress() << endl; 54 cout << yoci.getCount() << endl; 55 cout << Person::t << endl; 56 57 return 0; 58 }
总结:
1. 友元函数和友元类:在类内部声明友元(在该函数/类前加上friend即可),友元可以访问非公有成员在内的所有成员;
2. mutable 关键字,界限突破。声明mutable 变量,该变量一直处于可改变状态,就算在const函数内,照该不误;
3. 默认生成构造函数 ClassName() = default;为该类生成默认构造函数;
4. 删除函数:func() = delete; 禁止实现该函数;
5. 静态成员:
(1)静态数据成员:static声明,属于类而非对象,所有对象共享该变量可以使用 作用域运算符:: 对象. 成员函数 三种方法访问。
(2)静态函数成员:不包含this指针,不可声明为const,不能访问非静态成员(需要this指针,而它没有)
6.静态数据成员和一般成员的区别:
(1)不专属于谁,属于大家(所有对象);
(2)类外初始化;
(3)可用做默认参数
(4)可以是所属类 类型
(5)const函数内部仍可改值(就像加了mutable一样)
(6)访问方式:不能使用this->来访问。
参考资料: