欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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=”<