博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
子类的构造函数可以使用初始化列表的方式对父类的成员变量进行赋值吗?
阅读量:2384 次
发布时间:2019-05-10

本文共 568 字,大约阅读时间需要 1 分钟。

class Rectangle{

public:
    Rectangle() :a(0), b(0){}
    Rectangle(int x, int y) :a(x), b(y){}
 
public:
    int a;
    int b;
};
class Square :public Rectangle
{
public:
    Square(int x):a(x) {}
};
首先注意一点就是:父类的成员变量必须设置为public,否则子类这边拿不到

现在分析一下子类创建一个对象的过程,首先在堆或者在栈中开辟出一块空间,空间的大小由子类本身的成员变量大小和父类的成员变量大小,如果有虚函数,第一个位置还要加上虚函数的指针。

然后所有变量对应的位置处全是垃圾值

注意有一点要求:标准要求,每个对象在其生命周期内只能被初始化一次. 这是一个非常显然的要求

主要原因还是在于:初始化列表是在定义这个变量的同时就对其进行初始化赋值。在子类调用它的构造函数之前,先调用父类的构造函数对成员变量进行初始化赋值。此时a变量已经初始化完了。此时调用子类的构造函数,发现需要再次对a变量进行初始化,但是a已经被初始化过了。

而如果是构造函数赋值的方式,调用子类的构造函数的时候,先对其赋予垃圾值,然后将x的值赋给变量a,此时不算是初始化了,算是再次赋值,是可以进行的。

 

转载地址:http://fzbab.baihongyu.com/

你可能感兴趣的文章
如何对抗微软霸权,google给我们上了一课
查看>>
未能将基于用户的Visual C++项目设置保存到user文件错误的解决
查看>>
获取windows版本信息的做法
查看>>
忆父亲
查看>>
png库结合zlib库使用出现的一个链接问题的解决
查看>>
STL数组和com数组相互转换的做法
查看>>
开发平台软件中关于第三方库管理的一些思考
查看>>
svn创建分支的做法
查看>>
“当前不会命中断点。源代码与原始版本不同”的问题的有效解决办法
查看>>
对面向对象和面向过程的一些新理解
查看>>
软件开发中的资源管理
查看>>
有关博客的一些断想
查看>>
Windows Server2008上安装VS2008出错及解决办法
查看>>
打开word2010每次都要配置进度的解决办法
查看>>
略论并行处理系统的日志设计
查看>>
开发人员应具备的产品设计意识
查看>>
MSComDlg.CommonDialog服务器不能创建对象错误的解决
查看>>
ArcGIS二次开发之读取遥感图像像素值的做法
查看>>
netcdf源码在windows上的编译
查看>>
慎用VC 6.0
查看>>