现在讲讲基类的初始化。在继承中,构造函数是不被继承的,c++提供了一种机制,使得派生类在创建对象的时候,能够调用基类的构造函数来初始化基类的数据。派生类中构造函数的声明形式如下:派生类构造函数(参数列表):基类(参数列表),对象成员1(参数表),对象成员2(参数表)……;这个顺序可以这么来说,先长辈(基类),再客人(对象成员),后自己(派生类)。注意在输入参数列表的时候,参数是不能写上类型的。比如以下的代码:
#include <iostream>
using namespace std;
class base
{
public:
base(){cout<<"\n base created.\n";}
};
class d_class:public base
{
public:
d_class(){cout<<"\n d_class created.\n";}
};
void main()
{
d_class d1;
}
从结果中就可以直接看出来,在创建对象的时候是先调用了基类中的构造函数。还有一点需要注意的,就是在类与类之间,需要用分号隔开的。类{};类{}……
自己编写的以下的代码,并加上相关的注释
#include<iostream>
using namespace std;
class parent_class
{
int private1,private2;//缺省的时候是私有数据
public:
parent_class(int p1,int p2){private1=p1;private2=p2;}
int inc1(){return ++private1;}
int inc2(){return ++private2;}
void display(){cout<<"private1="<<private1<<",private2="<<private2<<endl;}
};
class derived_class:private parent_class
{
int private3;
parent_class private4;//创建基类对象,作为衍生类的成员
public:
derived_class(int p1,int p2,int p3,int p4,int p5)
:parent_class( p1, p2),private4(p3, p4)
{private3=p5;}
int inc1(){return parent_class::inc1();}
int inc2(){return parent_class::inc2();}//因为是私有继承,需要在派生类中重新定义
int inc3(){return ++private3;}
void display()
{
parent_class::display();//调用基类
private4.parent_class::display();//调用基类对象的显示函数
cout<<"private3="<<private3<<endl;
}
};
void main()
{
derived_class d1(17,18,1,2,-5);
d1.inc1();//此时的inc1是派生类中的inc1。
d1.inc2();//在派生类中重新定义了,以访问基类中的私有数据
//当为公有继承时可以用以下的方式进行访问d1.parent_class::display();
d1.display();//派生类中的显示函数,先调用基类的显示函数,再调用基类对象的显示函数,再显示private3的数据
d1.inc3();//使得private3自增
d1.inc2();
d1.display();
}