编译器为class A{}生成的函数
1 class A 2 { 3 public: 4 A(); //缺省构造函数 5 A(const A&rhs); //拷贝构造函数 6 ~A(); //析构函数 7 A& operator=(const A&rhs); //赋值运算符 8 A* operator&(); //取址运算符 9 const A* operator&() const; //取址运算符(const版本) 10 };
------ --------- --------- ------- ---- ---
const放在函数前分为两种情况,
一返回指针,此时该对象只能立即复制给新建的const char*,而不能是char*,意在强调值被保存在常指针中,
二返回一个char也就是值,此时const无意义,应当避免。
const放在函数后表明,该成员函数不得修改本对象任何成员,如果有对成员赋值语句则报错,相当于一种接口规范。
-------- ----------- -------- ----------
------ --------- --------- ------- ---- ---
C++静态成员函数访问非静态成员的几种方法 - Ricky.K - 博客园 (cnblogs.com)
总结评论:
提供了突破的思路,与友元相仿,
然而破坏了面向对象三原则之一:封装。如果是改造一个旧的系统,这样做可以理解,但如果是设计一个新的系统,还是应该在设计上提高能力。
另外方法三是非线程安全的。
非静态方法调用静态函数:通过实例化对象调用
------ --------- --------- ------- ---- ---
如果虚基类只存在有参构造函数且参数未提供默认值,则需要注意以下几点:
1) 对于虚基类的任何一个直接或间接派生类的构造函数,它的初始化列表中都必须包含对该虚基类构造函数的直接调用,以初始化虚基类中的数据成员。
2) 只在最后一层派生类的构造函数中调用虚基类的构造函数,该派生类的其他基类对虚基类构造函数的调用均被忽略。
3) 最后一层派生类的构造函数的调用顺序为:先调用虚基类的构造函数,再按照一般的多重继承中对基类构造函数的调用顺序依次调用各非虚基类的构造函数,最后调用本类的构造函数。
------ --------- --------- ------- ---- ---
原文:https://www.cnblogs.com/Knight02/p/14829570.html