目录
一、初始化常量数据成员和引用数据成员
二、调用拥有一组参数的基类的构造函数
构造函数后加冒号是初始化表达式,有四种情况下应该使用初始化表达式来初始化成员:
1:初始化const成员;
2:初始化引用成员;
3:当调用基类的构造函数,而它拥有一组参数时;
4:当调用成员类的构造函数,而它拥有一组参数时。
一、初始化常量数据成员和引用数据成员
在A类中有两个数据成员,一个是常量(const)数据成员,一个是引用数据成员,并且在构造函数中初始化了这两个数据成员,但是这并不能通过编译,因为常量初始化时必须赋值,它的值是不能再改变的,与常量一样引用初始化也需要赋值,定义了引用后,它就和引用的目标维系在了一起,也是不能再被赋值的。所以C ++ ":" 后初始化的机制,使引用和常量数据成员变为可能的,A类的构造函数应为:
class A {
protected:
const int a;
int &b;
A (int i, int j): a(i), b(j) {}
};
二、调用拥有一组参数的基类的构造函数
以命令模式为例:
//父类(抽象命令类)
class Command {
protected:
Receiver receiver;
public:
Command (Receiver rec){
this.receiver = rec;
}
virtual void Execute() = 0;//调用执行者动作
};
//子类(具体命令类)
class ConcreteCommand: public Command {
public:
ConcreteCommand (Receiver rec): Command (Receiver rec){
//绑定和父类相同的receiver
}
void Execute (){
receiver.Action();
}
};
//Receiver类(动作执行者)
class Receiver {
public:
void Action(){
//执行
}
};
解析:
若具体command类中receiver对象相同,可将receiver封装到父类( Command类)中,每次调用receiver时,需调用父类中的receiver对象,使用C ++ ":" 后初始化的机制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)