首页 > 其他 > 详细

继承过程中构造函数的执行顺序

时间:2020-07-09 13:14:20      阅读:74      评论:0      收藏:0      [点我收藏+]

基类一定要写默认构造函数(无参数的构造函数),因为无法预见派生类的对象是否调用默认构造函数。

如果派生类对象调用默认构造函数,则构造基类对象时只能调用默认构造函数,如果不写,将会出错。

 

构造函数和析构函数均不被继承。

 

构造函数的调用顺序:

(1)基类构造函数,按照被继承时声明的顺序;

(2)成员对象初始化,按照类中声明的顺序;

(3)派生类构造函数体。

 

#include <iostream>
using namespace std;
class Point{
public:
    Point(int xx=0,int yy=0){x=xx;y=yy;}
    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<<"Calling the copy constructor\n"<<endl;
}
//形参为Point类对象的函数
void fun1(Point p){
    cout<<p.getX()<<endl;
}
//返回值为Point类对象的函数
Point fun2(){
    Point a(1,2);
    return a;
}
int main(){
    Point a(4,5);
    Point b=a;             //第一种情况,初始化类的对象。‘=‘的意义是拷贝构造而不是赋值操作符,因为没有重载赋值操作符
    cout<<b.getX()<<endl;
    fun1(b);               //第二种情况,类的对象作为函数参数。
    b=fun2();              //第三种情况,类的对象作为函数返回值。
    cout<<b.getX()<<endl;
    return 0;
}

 

继承过程中构造函数的执行顺序

原文:https://www.cnblogs.com/showtime0701/p/13272995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!