C++构造函数的调用顺序

来源:本站
导读:目前正在解读《C++构造函数的调用顺序》的相关信息,《C++构造函数的调用顺序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C++构造函数的调用顺序》的详细说明。
简介:构造函数的执行次序如下:
1,调用基类构造函数,调用顺序按照他们的继承时声明的顺序。
2,调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的 顺序。
3,派生类的构造函数体中的内容。

构造函数的执行次序如下:

1,调用基类构造函数,调用顺序按照他们的继承时声明的顺序。

2,调用内嵌成员对象的构造函数,调用顺序按照他们在类中声明的 顺序。

3,派生类的构造函数体中的内容。

析构函数的调用顺序相反。

看下面的程序

#include<iostream>a

#include<math.h>

using namespace std;

class point{

public:

point(int xx=0,int yy=0)

{

x=xx;

y=yy;

cout<<"point原始构造函数going"<<endl;

}

point(point &p);

int getx()

{

return x;

}

int gety()

{

return y;

}

private:

int x,y;

};

point::point(point &p)

{

x=p.x;

y=p.y;

cout<<"point拷贝构造函数going"<<endl;

}

public class distan

{

private:

point p1,p2;

double dist;

public:

distan(point xp1,point xp2);

double getdis()

{

return dist;

}

};

distan::distan(point xp1,point xp2):p1(xp1),p2(xp2)

{

cout<<"distance 构造going"<<endl;

double x=double(p1.getx()-p2.getx());

double y=double(p1.gety()-p2.gety());

dist=sqrt(x*x+y*y);

}

void main()

{

point myp1(1,2);

point myp2(5,6);

distan my(myp1,myp2);

//distance my(myp1,myp2);

//cout<<"the distance is:"<<my.getdis()<<endl;

}

程序执行结果为:

point原始构造函数going

point原始构造函数going

point拷贝构造函数going

point拷贝构造函数going

point拷贝构造函数going

point拷贝构造函数going

distance 构造going

请按任意键继续. . .

point类的构造函数北调用了2次,拷贝构造函数调用了4次。而且都是在distan类构造函数之前。

拷贝构造函数是在

1 进行函数参数形式参数和实际参数结合distan(point xp1,point xp2);时调用

2 初始化内嵌对象时调用p1(xp1),p2(xp2);

总共调用4次拷贝构造函数。

思考,改进版本:

在行参和实参进行结合时,由于使用的是传值调用,所以有拷贝构造函数的调用。

将distan(point xp1,point xp2);改为 引用用调用,distan(point ※ xp1,point ※xp2);

则不会调用拷贝构造函数。

但是 初始化内嵌对象肯定要调用构造函数。

提醒:《C++构造函数的调用顺序》最后刷新时间 2024-03-14 01:03:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C++构造函数的调用顺序》该内容的真实性请自行鉴别。