c++中子类在继承基类的时候需要在构造函数中初始化变量。如果基类没有构造函数或者只有不带参数的构造函数,那么子类中的构造函数就不需要调用基类的构造函数了。

个人总结了两点子类中构造函数必须调用父类的构造函数的情况(最常见的情况,不完全):

1.当子类(派生类)中申明了父类(基类)类型的对象的时候,必须在子类的构造函数中进行对象的初始化。

2.当子类继承的父类中有带参数的构造函数的时候,必须在子类的构造函数中调用基类的构造函数。

下面以代码为例子:

例一(说明2):

 #include <iostream>
#include <string>
using namespace std; class person
{
string name;
int age;
public:
person(string _name,int _age):name(_name),age(_age){}
void call()
{
cout<<"I am a person..."<<endl;
}
}; class student : public person
{
int id;
public:
student(string _name,int _age,int _id):person(_name,_age),id(_id){}
void call()
{
cout<<"I am a student..."<<endl;
}
}; int main()
{
person a("ren",);
student b("jeavenwong",,);
a.call();
b.call();
return ;
}

例二(说明1)

 #include <iostream>
#include <string>
using namespace std; class person
{
string name;
int age;
public:
person(string _name,int _age):name(_name),age(_age){}
void call()
{
cout<<"I am a person..."<<endl;
}
}; class animal
{
string name;
int age;
public:
animal(string _name,int _age):name(_name),age(_age){}
}; class student : public person
{
int id;
animal object; //在student类中有animal类的对象,所以必须调用student类的构造函数进行初始化
public:
student(string _name,int _age,int _id):object(_name,_age),person(_name,_age),id(_id){} //注意:这里用对象的名字来对对象object进行初始化。
void call()
{
cout<<"I am a student..."<<endl;
}
}; int main()
{
person a("ren",);
student b("jeavenwong",,);
a.call();
b.call();
return ;
}

例三:

 #include <iostream>
#include <string>
using namespace std; class Student
{
protected:
string name;
int age;
int id;
public:
Student(string _name,int _age,int _id):name(_name),age(_age),id(_id){cout<<"Base class constructor..."<<endl;}
~Student(){cout<<"Base class destructor..."<<endl;}
}; class Graduate : public Student
{
private:
string addr;
public:
Graduate(string _name,int _age,int _id,string _addr):Student(_name,_age,_id),addr(_addr){cout<<"sub class constructor..."<<endl;}
~Graduate(){cout<<"sub class destructor..."<<endl;}
void show()
{
cout<<"my name: "<<name<<endl<<"my age: "<<age<<endl<<"my id: "<<id<<endl<<"my addr: "<<addr<<endl;
}
}; int main()
{
Graduate me("jeavenwong",,,"Hefei");
me.show();
return ;
}

例三运行结果:

如有不对,欢迎批评指正!

最新文章

  1. hibernate处理null 时提示:Property path [...] does notreference a collection
  2. 动态代理模式和AOP探究
  3. Codeforces Round #138 (Div. 2)
  4. 数据挖掘:Weka代码学习
  5. 第一个leapmotion的小游戏
  6. iMAC——全新重装Mac系统
  7. DataTable 数据量大时,导致内存溢出的解决方案
  8. 【Cocos2D-x 3.5实战】坦克大战(2)游戏开始界面
  9. javaSE_05Java中方法(函数)与重载、递归
  10. JMeter脚本录制
  11. Java设计模式 (转)
  12. JAVA HashMap的实现原理
  13. log4cxx用环境变量设置输出文件名
  14. BZOJ_3239_Discrete Logging_BSGS
  15. vim与程序员
  16. SQL大数据查询优化
  17. Java学习随笔(1)--groovy爬虫
  18. Confluence 6 在数据源连接中启用校验查询
  19. mongodb基类封装实例
  20. 细细探究MySQL Group Replicaiton — 配置维护故障处理全集(转)

热门文章

  1. 【kmp】似乎在梦中见过的样子
  2. shell习题第17题:检测磁盘
  3. HTTP协议探究(二):代理、网关和隧道
  4. java lesson09总结
  5. Unity 屏幕坐标到UGUI RectTransform本地坐标的转换
  6. servlet报错“严重: Allocate exception for servlet 类名java.lang.ClassNotFoundException: 路径. 类名”可能原因
  7. c# ServiceStack web 搭建
  8. Oracle创建索引;查询索引
  9. java之JVM学习--简单理解编译和运行的过程之概览
  10. 红外 NEC编码