基类一定要写默认构造函数(无参数的构造函数),因为无法预见派生类的对象是否调用默认构造函数。
如果派生类对象调用默认构造函数,则构造基类对象时只能调用默认构造函数,如果不写,将会出错。
构造函数和析构函数均不被继承。
构造函数的调用顺序:
(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