派生类同样有构造函数。当我们创建一个派生类对象的时候,基类构造函数将会被自动调用,用于初始化派生类从基类中继承过来的成员变量。而派生类中新增的成员变量则需要重新定义构造函数用于初始化了。
#include<iostream>
using namespace std;
class book
{
public:
book();
book(char* a, double p = 5.0);
void setprice(double a);
double getprice()const;
void settitle(char* a);
char * gettitle()const;
void display();
private:
double price;
char * title;
};
class book_derived :public book
{
public:
book_derived(){cout<<"book_derived 构造函数"<<endl;}
void display();
};
book::book(char* a, double p)
{
title = a;
price = p;
}
book::book()
{
cout<<"book 构造函数"<<endl;
title = "NoTitle";
price = 0.0;
}
void book::setprice(double a)
{
price = a;
}
double book::getprice()const
{
return price;
}
void book::settitle(char* a)
{
title = a;
}
char * book::gettitle()const
{
return title;
}
void book::display()
{
cout<<"book The price of "<<title<<" is $"<<price<<endl;
}
void book_derived::display()
{
cout<<"book_derived The price of "<<gettitle()<<" is $"<<getprice()<<endl;
}
int main()
{
book_derived b;
b.display();
return 0;
}
运行结果:
book 构造函数 book_derived 构造函数 book_derived The price of NoTitle is $0
创建对象时先是执行基类的构造函数,然后再是执行派生类构造函数。构造函数执行顺序是按照继承顺序自顶向下执行。