C++中的继承02-属性的继承

本篇是基于上一篇的内容继续来学习继承,没看过上一篇的朋友,请点击下方

C++中的继承01-初识继承

先看下方两个类

class Father
{
public:
	int age;
};

class Son : public Father
{


};

有了继承关系后,Son中虽然没有int age,但依然可以访问到age,如下

Son son;
son.age = 20;
cout << son.age << endl;

那么现在,就来思考一个问题,为什么son可以访问到Father类中的age变量的呢?

为了能更加容易的理解这个问题,我们需要借助一个工具:vs2013开发人员命令提示.exe,如下

打开该工具后,在命令行里输入如下命令

cl /d1 reportSingleClassLayout类名+类所在的文件名

该命令的作用是用于查看某个类,在经过编译器编译之后,该类的结构成什么样了。

现在就来实践一下

如下,当前Son类,是定义在test.cpp里的

现在在vs2013开发人员命令提示.exe中输入如下,用于查看Son类在被编译器编译之后的结构。

cl /d1 reportSingleClassLayoutSon test.cpp

回车之后,将打印如下内容

可以发现,在编译之后,编译器会在Son类里添加1个age属性,相当于是编译器从Father中将age又复制了一份到Son里,只有这样,我们才可以通过Son对象访问到age变量。

假如,此时我在Son里又加一个age变量,如下

class Son : public Father
{

public:
	int age;
};

那么在编译器编译之后,Son的类结构又会变成什么样呢?

输入命令:

cl /d1 reportSingleClassLayoutSon test.cpp

打印结果如下

可以发现,在编译之后,Son里有2个age变量,base class Father 下面的age,表示该age是从Father中拷贝的,另一个age,是Son自己定义的。

由这里,你可以发现,在编程语言里,继承的本质就是拷贝,就是将父类中的属性,拷贝一份到子类里。

那么现在我想给父类中的age变量赋值,可以通过如下代码

Son son;
	son.Father::age = 20;
	cout << son.Father::age << endl;

假如想给Son的age变量赋值,就通过如下代码

Son son;
	son.age = 200;
	cout << son.age << endl;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值