面向对象学习笔记(一)——C++构造函数后加冒号

目录

一、初始化常量数据成员和引用数据成员

二、调用拥有一组参数的基类的构造函数


构造函数后加冒号是初始化表达式,有四种情况下应该使用初始化表达式来初始化成员:

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 ++ ":" 后初始化的机制

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点意思的鸭鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值