关于私有继承

类内部成员的访问权限容易理解,而在继承时设定的权限设置少有注意。
比如近几天碰到的问题:

class Person
{
public:
    Person():m_age(0) {
        cout << "Person::Person()" << endl;
    }
    Person(int age): m_age(age) {
        cout << "Person::Person(int age)" << endl;
    }
    ~Person() {
        cout << "Person::~Person()" << endl;
    }
    int GetAge() {
        return m_age;
    }
    string GetName() {
        return m_name;
    }   
    string m_name;  
private:
    int m_age;
};

class Worker: Person
{
public:
    Worker() {
        cout << "Worker::Worker()" << endl;
    };
    Worker(int age): Person(age) {
         cout << "Worker::Worker(int age)" << endl;
    }
    ~Worker() {
        cout << "Worker::~Worker()" << endl;
    };
    string GetCompany() {
        return m_company;
    }   
private:
    string m_company;
};

main函数使用:

Worker *pw = new Worker(20);
cout << pw->GetAge() << endl;

直接报错:

error C2247: 'Person::get_age' not accessible because 'Worker' uses 'private' to inherit from 'Person'

其实这对CPP开发者来说是最基本不过的问题,private继承后,基类Person的方法不能再main代码范围内访问。常常说基类的成员函数默认情况下都将在派生类中变为私有。这话怎么理解?是相当于在Worker中定义一个
private GetAge()么?经过测试如此。pw->GetAge() 不能调用,但是在Worker的成员函数中可以调用GetAge(); 但是如果基类中的GetAge()改为private,那么在Worker的成员函数也是无法访问的。

public:
string GetName() {
    return m_name;
}
string m_name;
private:
int GetAge() {
    return m_age;
}
//main.cpp
Worker *pw = new Worker(20);
cout << pw->GetName() << endl;
cout << pw->GetAge() << endl;

私有继承导致在main中两个都无法访问。
但是Work中的新定义的成员函数能访问么?
默认的private继承时:
基类中的private成员只能在基类中访问,无法在继承类以及其他外部访问。
基类中的public成员能在基类和继承类中访问,不能被其他外部代码访问。
(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值