将构造函数放在private里面,这节视频就这样出现啦!
1.将构造函数放在private里面,表示构造函数不可以被外界调用。
complex c1(2, 1);
complex c2;
上面这两个动作,不可以运行,因为构造函数放在了private里面,不允许外界私自调用。
-----------------------------------------------被用到的过程(Singleton)------------------------------------------
class A{
public:
static A& getInstance();
setup() {...}
private:
A();
A(const A& rhs);
};
A& A::getInstance(){ 调用方式,A::getInstance().setup();
static A a;
return a;
} 单例模式表示,整个函数不允许被“外界”调用,并且仅有一个副本。
2.常量成员函数
double real() const {return re;} 此处的const表示不允许改变数据成员内容的,相当于对this指针声明为不可以更改。
示例:1. double real() {return re;}
2. const complex c1(2,1);
3. c1.real() 此处是绝对不允许如此操作的,c1.real()相当于隐含表达this = c1,此时会更改this的不可更改性。
~~~~~~~~~应当更改为~~~~~~~~~~~~~
1. double real() const {return re;} 这个部分特别重要!
------------------------------------------实际理解情况为-------------------------------------------
1.所有的成员的函数,在函数的参数列表里面都拥有一个this指针。
2.this指针所指向的对象是调用者对象。
3.在默认情况下,this的类型是指向“类类型的非常量”(成员函数目前是可以改变的)的“常量指针”(指针不可改变,仅指向调用类)。
Class* const this;
4.按照初始化原则,不能将this赋值为一个常量对象上。
Class* const this; 不能赋值为
3.参数的传递:pass by value vs. pass by reference(to const)
参数传递尽量传引用,注意需要不可以被改的情况下,尽量用const。(传递应用的速度相当于传递指针的速度。)
4.返回值传递:return by value vs. return by reference
返回值传递尽量传引用。
示例: complex& operator += (const complex&);
5.friend友元
friend complex& _doapl (complex*, const complex&);
inline complex&
_doapl (complex* ths, const complex& r){
ths - > re += r.re;
ths->im += r.im;
return *ths;
}
friend 会打开太多的封装,可以利用函数拿数据(但是会稍稍慢一点点)
6.相同class的各个objects互为friends友元
class complex{
public:
complex(double r = 0; double i = 0): re (r), im(i){}
int func(const complex& param){
return param.re + param.im;
}
private:
double re, im;
}
----------------------------------------------------------------
c2.func(c1);
7.什么时候返回值不允许使用引用
函数的运算结果,放在什么位置。会不会在函数结束生命消失。
标准化书写三点:
1.数据一定在private里面
2.参数尽可能以引用传递
3.返回值尽可能用引用传
4.应当加const的地方必须要加
5.构造函数的特殊语法