C++类的默认继承方式为保护继承

二义性:就是指取值不明确,比如下面例子中的D3同时继承与父类D1,D2。而两个父类当中都有成员变量k.此时如果想要用D3的对象,访问父类的成员变量K,则需要加上相应的域名才能访问。并且只有在继承方式为公有的情况下才可以访问。

如果继承方式忘了写,就算加上域名也访问不了。因为类的默认继承方式为保护类型。二此种继承方式下,派生类对象无法访问基类的任何成员。

#include <iostream>

using namespace std;

class D1
{
public:
    D1(int k)
    {
        this->k = k;
        cout << "D1 cunstruct " << this->k << endl;
    }
    int k;
};


class D2
{
public:
    D2(int k)
    {
        this->k = k;
        cout << "D2 cunstruct " << this->k << endl;
    }
    int k;

};

class D3 : public D1, public D2 // 如果不写继承方式则默认为保护类型
{
public:
    D3(int k, int k1) :D1(k), D2(k1)
    {
        cout << "D3 cunstruct " << endl;
    }

private:

};

void main()
{
    D3 d3(20, 30);
    d3.D2::k = 100;
    cout << d3.D2::k << endl;   //如果不加域名则访问不明确
    getchar();

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值