派生类中构造函数与虚构函数的研究
1.继承过程中的构造函数
1.1 单一继承时的构造函数
#include<iostream>
using namespace std;class B{
public:B();B(int i);~B();void Print() const;
private:int b;
};
B::B()
{ b=0;cout<<"B's default constructor called."<<endl;
}
B::B(int i)
{ b=i;cout<<"B's constructor called." <<endl;
}
B::~B()
{ cout<<"B's destructor called."<<endl; }
void B::Print() const
{ cout<<b<<endl; }class C:public B
{
public:C();C(int i,int j);~C();void Print() const;
private:int c;
};
C::C() //自动调用基类B的默认构造函数
{ c=0;
cout<<"C's default constructor called."<<endl;
}
C::C(int i,int j):B(i) //显式调用基类B的含有参数的构造函数
{ c=j;
cout<<"C's constructor called."<<endl;
}
C::~C()
{ cout<<"C's destructor called."<<endl; }
void C::Print() const
{ B::Print(); cout<<c<<endl; }
void main()
{ C cc;C obj(5,6); obj.Print();
}
1.2 多继承时的构造函数
#include <iostream>
using namespace std;class B1{
public: B1(int i) {cout<<"constructing B1 "<<i<<endl;}
};
class B2{
public:B2(int j) {cout<<"constructing B2 "<<j<<endl;}
};
class B3{
public:B3() {cout<<"constructing B3 *"<<endl;}
};
///
class C: public B1, public B2, public B3{
public:C(int a,int b, int c,int d):memobj1(c),B1(a),B2(b),memobj2(d) {}
private:B2 memobj2;B1 memobj1;B3 memobj3;
};
void main()
{C obj(1,2,3,4);
}
运行结果:
1.3 派生类中构造函数的调用次序
1.4 派生类中的构造函数
2.继承时的析构函数
#include <iostream>
using namespace std;class B1{
public: B1(int i) {cout<<"constructing B1 "<<i<<endl;}~B1() {cout<<"destructing B1 "<<endl;}
};
class B2{
public:B2(int j) {cout<<"constructing B2 "<<j<<endl;}~B2() {cout<<"destructing B2 "<<endl;}
};
class B3{
public:B3() {cout<<"constructing B3 *"<<endl;}~B3() {cout<<"destructing B3 "<<endl;}
};
///
class C: public B1, public B2, public B3{
public:C(int a,int b, int c,int d):memobj1(c),B1(a),B2(b),memobj2(d) {cout<<"constructing C "<<endl;}
private:B2 memobj2;B1 memobj1;B3 memobj3;
};
void main()
{C obj(1,2,3,4);
}
运行结果:
派生类中构造函数与虚构函数的研究相关推荐
- C++中基类与派生类的构造函数和析构函数
1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...
- 基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数(学习笔记:第7章 06)...
派生类的构造函数[1] 默认情况 基类的构造函数不被继承; 派生类需要定义自己的构造函数. C++11规定 可用using语句继承基类构造函数. 但是只能初始化从基类继承的成员. 派生类新增成员可以通 ...
- C++学习笔记-----永远不要在派生类中改变虚函数的默认参数值
提到虚函数,我们就会自然而然的想到多态,但是当虚函数中存有默认参数值的时候,在派生类中重定义这个虚函数时不可以改变这个参数的值. 请看下面的例子: #include "stdafx.h&qu ...
- 类中构造函数、析构函数与赋值函数的重写
类中构造函数.析构函数与赋值函数的重写 class String { public: String(const char *str = NULL); // 普通构造函数 String(const St ...
- C++:派生类中的构造函数问题
1.基类中没有定义构造函数(就是用默认构造函数)或像下面这种定义一个空的构造函数.此时派生类中的构造函数就照常写 #include<iostream> using namespace st ...
- 避免在派生类中重新定义基类的非虚函数
我们都知道,在基类中定义虚函数的目的是允许派生类拥有相同接口却可以有不同的实现,通过对象的指针或引用来访问虚函数可以实现运行时的多态.这么说来,在派生类中重定义(override)虚函数是没有任何问题 ...
- c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...
- 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 [注意]对派生类进行拷贝构造时,如果想让基类的成 ...
- C++基类和派生类的构造函数(一)
前面我们说基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成 ...
最新文章
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
- 互联网或将进入泡沫2.0时代
- kafka配置公网IP访问
- java 中jtextfield访问限制_java.swing JtextField 中怎么限制只能输入数字
- [渝粤教育] 中国地质大学 电路理论(新) 复习题 (2)
- 软件测试之python面试题_常见Python面试题整理带答案
- C++之实现优先队列
- 量化交易:聚宽,(1)
- VS2017编译SNMP库
- 关于触摸屏触摸驱动安装步骤
- 【递归算法】递归算法的快速入门
- git新建账号_Git的安装以及注册账号等操作
- 路由器上面的WAN口和LAN口是什么意思
- 深入理解浏览器兼容性模式
- 2017 php 免费空间,免费空间免费php空间
- JS结合PHP瀑布流,JavaScript_原生JS实现响应式瀑布流布局,原生JS实现的瀑布流布局,代 - phpStudy...
- where is java_Linux下的搜索查找命令的详解(whereis)
- 【烈日炎炎战后端】MySQL理论(2.8万字)
- 决策树算法实现:泰坦尼克号乘客生存预测 (python实现)
- 随性随笔_201606