怎么可以自己制作网站,网站图片大小优化,怎么开一个微信公众号,中国计算机公司排名2012-05-20 Chapter09 1、复制构造函数浅复制时的隐患 若对象中有指针成员#xff0c;则当对象作为形参传入时 例如void myFun(Spreadsheet s)…… Spreadsheet s1(5,3); myFun(s1);// s1与s中的指针成员指向同一块内存#xff08;s是由s1通过复制构造函数生成的#xff…2012-05-20 Chapter09 1、复制构造函数浅复制时的隐患 若对象中有指针成员则当对象作为形参传入时 例如void myFun(Spreadsheet s)…… Spreadsheet s1(5,3); myFun(s1);// s1与s中的指针成员指向同一块内存s是由s1通过复制构造函数生成的当myFun()结束时会释放s则s指针成员所指向空间释放导致s1的指针成员指向的空间释放即s1的指针成员指向一块已经释放的内存。 2、赋值运算符浅复制时的隐患 Spreadsheet s1(2,2),s2(4,3); s1s2; 则s1,s2中的指针成员指向了同一块内存s1的导致s2的指针成员原来所指向的内存成了孤儿内存 ∴重写赋值运算符注意的三点 1检查自赋值情况。2删除原来所指向的内存并用rhs的值重新分配内存。3返回(*this)即对象的引用 3、也可将复制构造函数与赋值运算符设为私有不必实现禁止用户这么做比如数组类 private: Spreadsheet (const Spreadsheet src); Spreadsheet operator(const Spreadsheet src); 4、静态数据成员一个与类关联而不是与对象关联的数据成员 会默认初始化为0在函数与方法体之外进行初始化 int Spreadsheet::sCounter0; //初始化 5、const数据成员通常是静态的 尽可能用static const 取代全局变量 ∵是static ∴必须在源文件中为其声明空间方法体外 如 const int Spreadsheet::MaxValue100; 另外C允许在类文件中声明这些变量的同时为其赋值 class Spreadsheet { public : static const int MaxValue100; } 6、静态方法方法应用于整个类而不是单个对象 ∴并不是在一个特定的对象上调用即没有this指针 不能在静态方法中访问非静态成员 在类中像调用常规函数一样调用静态方法。 若声明为public则在类外可这样调用 string strSpreadsheet::doubleToString(5); 7、const方法 如果有一个const对象或者对const对象的引用编译器不允许该对象调用任何方法防止修改数据成员除非是const方法 例如double getValue() const; //类定义中即头文件中 double SpreadsheetCell::getValue() const { return mValue; //方法定义中即源文件中 }//const不能修改数据成员否则编译器报错 非const对象可调用非const、const方法 const对象只能调用const方法 8、关键词mutable 在const方法中编译器不允许修改普通数据成员但可在const方法中修改mutable数据成员 如在类定义中mutable int NumberAccess; 则可在const方法中修改NumberAccess的值 9、函数重载补遗 可以编写两个同名且参数相同的方法一个声明const一个不声明 若提供const对象调用const方法反之亦然 10、内联 法一在类定义中inline声明方法定义中实现 法二类定义中直接写出其方法定义即在类定义中展开代码无需关键词inline 11、友元 类可以将其他非成员函数声明为友元可以访问protected、private成员和方法 类的内部会暴露给其他类或函数破坏抽象原则 所以在有限的情况下如运算符重载使用友元转载于:https://www.cnblogs.com/yangtianxing/archive/2012/06/04/2535374.html