基类和派生类的构造函数,隐式调用与显式调用
来源:互联网 发布:检测fps的软件 编辑:程序博客网 时间:2024/06/05 20:17
当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函数创建派生类对象之前,系统首先调用基类的构造函数创建基类对象。当派生类对象生命期结束时,首先调用派生类的析构函数,然后调用基类的析构函数。简而言之,就是说,构造函数:基类->派生类。析构函数:派生类->基类。
这个我们完全可以通过一个小程序来说明:
//通过输出就可以看出在创建派生类对象b1时各个函数的调用顺序了
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"A(Based Class) constructor is called"<<endl;
}
~A()
{
cout<<"A(Based Class) destructor is called"<<endl;
}
};
class B:public A
{
public:
B()
{
cout<<"B(Derived Class) constructor is called"<<endl;
}
~B()
{
cout<<"B(Derived Class) destructor is called"<<endl;
}
};
int main()
{
B b1;
return 0;
}
2. 通过派生类的构造函数调用基类的构造函数有两种方式,隐式和显式两种。所谓隐式方式就是在派生类的构造函数中不指定对应的基类的构造函数,这个时候调用的是基类的默认构造函数(即含有默认参数值或不带参数的构造函数)。而所谓显式方式,就是在派生类的构造函数中指定要调用的基类的构造函数,并将派生类构造函数的部分参数值传递给基类构造函数。注:除非基类有默认的构造函数,否则必须采用显式调用方式
下面分别给出一个隐式和显式调用的例子:
#include <iostream>using namespace std;
class A
{
public:
A(int x = 0,int y = 0)
{
a = x;
b = y;
}
private:
int a;
int b;
};
//基类A有默认的构造函数,可以隐式调用
class B:public A
{
public:
B(int z = 0)
{
c = z;
}
private:
int c;
};
int main()
{
B b1;
return 0;
}
#include <iostream>
using namespace std;
class A
{
public:
A(int x,int y)
{
a = x;
b = y;
}
private:
int a;
int b;
};
//基类A没有默认的构造函数,其现有的构造函数需要传递参数,通过
//派生类构造函数调用A构造函数时必须如下显式调用
class B:public A
{
public:
B(int x,int y,int z):A(x,y)
{
c = z;
}
private:
int c;
};
int main()
{
B b1(1,2,3);
return 0;
}
原文出处:http://www.cnblogs.com/persistentlyworking/archive/2013/08/26/3282941.html
- 基类和派生类的构造函数,隐式调用与显式调用
- 【牛客 题库】 求字符串长度和大小 || 基类和派生类的构造函数,隐式调用与显式调用 || 数组下标的数据类型
- 基类与派生类的构造函数调用问题
- 构造函数访问权限和基类构造函数,派生类的构造函数调用顺序
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 派生类构造函数的调用顺序
- 派生类构造函数的调用顺序
- C++派生类与基类构造函数调用次序
- 构造函数和析构函数在基类和派生类之间的调用顺序
- 派生类调用基类的构造函数
- 派生类中调用基类的构造函数
- 派生类的构造函数 与基类的调用关系
- C++ 基类和派生类之间构造函数的调用
- 【C++】基类和派生类构造函数的调用顺序
- c++基类和派生类的构造析构函数调用顺序
- Entity Framework Code First关系映射约定
- Android 进程保活系列:(一)利用 Activity 提升权限
- Android中16进制颜色大全
- Sass style guide
- python按行写入到文件 另存为文件
- 基类和派生类的构造函数,隐式调用与显式调用
- 控件缩写
- Spring Boot实战之Spring基础配置
- saltstack
- 十、提升state
- C++中的mutable和volatile关键字
- TCP协议报文段首部的控制位中URG与PSH的比较
- java(正则表达式)规范创建Windwos文件名
- 安装opencc出错