C++构造函数中遇到的问题
程序员文章站
2023-04-02 14:45:33
对于构造函数初始化,分为有参数构造函数初始化和无参数构造函数初始化。
1、无参数构造函数初始化
SubBase obj1;这里对象obj1无参数带入,但是构造函数需要初始化,这...
对于构造函数初始化,分为有参数构造函数初始化和无参数构造函数初始化。
1、无参数构造函数初始化
SubBase obj1;这里对象obj1无参数带入,但是构造函数需要初始化,这时只能先在SubBase类中调用无参数构造函数 SubBase(){z=0;},然后在调用父类中无参数构造函数 Base();Base::Base(){x=0;y=0;}这样x,y,z分别都被初始化为x=0,y=0,z=0.下面调用obj1.display();时就会份别输出x=0,y=0,z=0
调用无参数SubBase obj1;构造函数初始化顺序如下:
SubBase(){z=0;} Base(); Base::Base(){x=0;y=0;}
2、有参数构造函数初始化
SubBase obj2(1,2,3);这里对象obj2(1,2,3)为有参数带入。构造函数初始化 SubBase(int m,int n,int l); SubBase::SubBase(int m,int n,int l):Base(m,n),z(l){} Base::Base(int m,int n):x(m),y(n){} 这里初始化为x=m,y=n SubBase::SubBase(int m,int n,int l):Base(m,n),z(l){}
初始化x,y之后,再执行z(l),z(l)就等于z=l
执行完上面几条语句之后,带参数对象的构造函数初始化可以得到
x=m,y=n,z=l
后面执行obj2.display();
可以打印出x=1,y=2,z=3
总结:(1)对于上面函数z(l)就等价于z=l,x(m)等价于x=m,y(n)等价于y=n。
(2)对于有参数构造函数的初始化
SubBase::SubBase(int m,int n,int l):Base(m,n),z(l){}
父类中已有的两个参数x,y可以通过调用父类的带参数构造函数进行初始化,对于z,需要在这里单独进行初始化。
源代码:
#include using namespace std; class Base{ int x; protected: int y; public: Base(); Base(int m,int n); void set(int m,int n); int getX(); int getY(); void display(); }; Base::Base(){x=0;y=0;} Base::Base(int m,int n):x(m),y(n){} void Base::set(int m,int n) { x=m; y=n; } int Base::getX(){return x;} int Base::getY(){return y;} void Base::display() { cout<<”x=”<
推荐阅读
-
Python中type的构造函数参数含义说明
-
javascript中如何用构造函数创建对象以及子类的继承?
-
微信小程序中遇到的iOS兼容性问题小结
-
c++ 拷贝构造函数(重点在内含指针的浅拷贝和深拷贝)
-
C++类的相关问题、构造函数与析构函数、复制构造函数实例讲解
-
DEV C++在win7系统中安装以及遇到的一些问题解决
-
C++ 调用Python3 脚本中无法引入内建模块的问题解决方法
-
ubuntu14.04 使用中遇到的问题及解决方法集锦
-
OpenCV中的新函数connectedComponentsWithStats使用(python和c++实例)
-
解决python写入mysql中datetime类型遇到的问题