C++继承的一些结论

#include <iostream>

using namespace std;

class student
{
public:
    void get_value()
    {
        cin >> num >> name >> sex;

    }
    void display()
    {
        cout << "num:" << num << endl;
        cout << "name:" << name << endl;
        cout << "sex:" << sex << endl;
    }
protected:
    int num;
    char name[10];
    char sex;
};

class student1:public student
{
public:
    void get_value_1();
    void display1();
private:
    int age;
    char addr[30];
};

void student1::get_value_1()
{
    get_value();
    cin >> age >> addr;
}

void student1::display1()
{
    cout << "num:" << num << endl;
    cout << "name:" << name << endl;    //直接引用基类的保护成员
    cout << "sex:" << sex << endl;
    cout << "age:" << age << endl;
    cout << "address:" << addr << endl;
}

class student2:public student1
{
public:
    void display2()
    {
        cout << num << endl;

    }
};

int main()
{
    student1 stud1;
    stud1.get_value_1();
    stud1.display1();
    student2 stud2;
    stud2.display2();
    cout << "Hello world!" << endl;
    return 0;
}

输入:

101 John M 19 Beijing

输出:

101

John

M

19

Beijing

0

分析:

如果派生类共有继承积累,那么派生类中继承基类的公有成员与保护成员(声明了这样的类型,如int char char),但如果基类建立了一个对象,而派生类建立一个对象,那么派生类对象中数据不是共享基类对象中的数据,因为不同对象对应不同的内存空间。这就解释了最后输出的num是0,因为在stud2这个对象中,num没有初始化,而刚好存num的空间的值为0,所以输出为0而不是基类中的101。

另一些有关继承的结论:

对于保护继承,其基类的公有成员在其派生类中会自动转换成保护成员。

对于保护继承,其派生类定义中可以调用基类保护成员,但在派生类对象中无法直接调用基类保护成员,还有其基类对象也不能直接访问其保护成员数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值