C++之封闭类和常量对象

封闭类

成员对象:一个类的成员变量是另一个类的对象。
有成员对象的类叫封闭类。

举例

class CTyre
{
    private:
        int radius;
        int width;
    public:
        CTyre(int r,int w):radius(r),width(w) { }    //:后面是初始化列表
};
class CEngine
{
};
class CCar  // 封闭类
{
    private:
        int price;
        cTyre tyre;   // 成员对象
        CEngine engine;
    public:
        CCar(int p,int tr,int tw); // 必须要自己定义构造函数,因为cTyre没有无参构造函数,有自定义构造函数。
};
CCar::CCar(int p,int tr,int w):price(p),tyre(tr,w)  // 初始化列表
{
};
int main()
{
    CCar car(20000,17,225);
    return 0;
}

注意:
任何生成封闭类对象的语句,都要让编译器明白,对象中的成员对象,是如何初始化的。具体做法就是:通过封闭类的构造函数的初始化列表。

封闭类构造函数和析构函数的执行顺序:
封闭类对象生成时,先执行所有对象成员的构造函数,然后才执行封闭类的构造函数。
对象成员的构造函数调用次序和对象成员在类中的说明次序一致,与他们在成员初始化列表中出现的次序无关。
当封闭类的对象消亡时,先执行封闭类的析构函数,然后再执行成员对象的析构函数。次序和构造函数的调用次序相反。

常量对象

  1. 如果不希望某个对象的值被改变,就可以再定义该对象的时候在前面加const关键字。
class Demo {
    private:
        int value;
    public:
        void SetValue() {}
};
const Demo Obj;   //常量对象
  1. 在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数。

注意:
常量成员函数执行期间不应该修改其所作用的对象。因此,在常量成员函数中不能修改成员变量的值(静态成员变量除外),也不能调用同类非常量成员函数,因为调用了可能会修改成员变量的值(静态成员函数除外,因为在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数)。

class Sample
{
    public:
        int value;
        void GetValue() const   //常量成员函数
        void func() {};
        Sample() {} 
};
void Sample::GetValue() const
{
    value = 0// wrong
    function(); // wrong
}
int main()
{
    const Sample o;  //常量对象
    o.value =100;  // wrong,常量对象不能被修改
    o.func();      //wrong,常量对象上不能执行非常量成员函数
    o.GetValue();  //right
    return 0;
}

常量成员函数的重载:
两个成员函数,名字和参数表都一样,但是一个是const,一个不是,算重载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值