C++类继承中的构造函数和析构函数 调用顺序
思想:
在C++的类继承中,构造函数不能被继承(C11中可以被继承,但仅仅是写起来方便,不是真正的继承)
建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推;
析构对象时,其顺序正好与构造相反;
if(子类没有自定义构造函数)
{
if(基类没有自定义构造函数)
{
用子类定义对象时,先自动调用基类的默认构造函数,再调子类的默认构造函数。
}
else if(基类有自定义无参构造函数)
{
用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的默认构造函数。
}
else
{
用子类定义对象时,编译提示没有默认构造函数可用
}
}
else if(子类自定义构造函数但没有调用基类的某个构造函数)
{
if(基类没有自定义构造函数)
{
用子类定义对象时,先自动调用基类的默认构造函数,再调子类的自定义构造函数。
}
else if(基类有自定义无参构造函数)
{
用子类定义对象时,先自动调用基类的自定义无参构造函数,再调子类的自定义构造函数。
}
else
{
用子类定义对象时,编译提示没有默认构造函数可用
}
}
#include <iostream>
using namespace std; class Shape{
public:
void Draw() {cout<<"Base::Draw()"<<endl;}
void Erase() {cout<<"Base::Erase()"<<endl;}
Shape() {Draw();}
~Shape() {Erase();}
};
//-------------------------------------------------
class Polygon:public Shape{
public:
Polygon() {Draw();}
void Draw() {cout<<"Polygon::Draw()"<<endl;}
void Erase() {cout<<"Polygon Erase()"<<endl;}
~Polygon() {Erase();}
};
//--------------------------------------------------
class Rectangle:public Polygon{
public:
Rectangle() {Draw();}
void Draw() {cout<<"Rectangle::Draw()"<<endl;}
void Erase() {cout<<"Rectangle Erase()"<<endl;}
~Rectangle() {Erase();}
};
//--------------------------------------------------
class Square:public Rectangle{
public:
Square() {Draw();}
void Draw() {cout<<"Square::Draw()"<<endl;}
void Erase() {cout<<"Square Erase()"<<endl;}
~Square() {Erase();}
};
//--------------------------------------------------
int main(){
Polygon c;
Rectangle s;
Square t;
cout<<"------------------------------------------"<<endl;
return ;
}

C++类继承中的构造函数和析构函数 调用顺序的更多相关文章
- (C++)C++类继承中的构造函数和析构函数
思想: 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时,其顺序正好与构造相反: 例子: #include <iostream& ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- C++中的构造函数和析构函数
构造函数: 在类实例化对象时自动执行,对类中的数据进行初始化.构造函数可以从载,可以有多个,但是只能有一个缺省构造函数. 析构函数: 在撤销对象占用的内存之前,进行一些操作的函数.析构函数不能被重载, ...
- C++ 类的继承五(类继承中的static关键字)
//类继承中的static关键字 #include<iostream> using namespace std; /* 派生类中的静态成员 基类定义的静态成员,将被所有派生类共享 根据静态 ...
- C# 类继承中的私有字段都去了哪里?
最近在看 C++ 类继承中的字段内存布局,我就很好奇 C# 中的继承链那些 private 字段都哪里去了? 在内存中是如何布局的,毕竟在子类中是无法访问的. 一:举例说明 为了方便讲述,先上一个例子 ...
- C++ 类的继承四(类继承中的重名成员)
//类继承中的重名成员 #include<iostream> using namespace std; /* 自己猜想: 对于子类中的与父类重名的成员,c++编译器会单独为子类的这个成员变 ...
- C#类继承中构造函数的执行序列
不知道大家在使用继承的过程中有木有遇到过调用构造函数时没有按照我们预期的那样执行呢?一般情况下,出现这样的问题往往是因为类继承结构中的某个基类没有被正确实例化,或者没有正确给基类构造函数提供信息,如果 ...
- Python多类继承中,子类默认继承哪个父类的构造函数__init__
[1]python中如果子类有自己的构造函数,不会自动调用父类的构造函数,如果需要用到父类的构造函数,则需要在子类的构造函数中显式的调用. [2]如果子类没有自己的构造函数,则会直接从父类继承构造函数 ...
- C++中的构造函数与析构函数及组合类的调用
// 构造函数与析构函数及类的组合 #include "stdafx.h"#include <iostream>using namespace std; //枚举enu ...
随机推荐
- 关于androidAsyncHttp支持https
一.AsyncHttpClient asycnHttpClient = new AsyncHttpClient(true, 80, 443); 二.或者参照源码,添加证书验证 You need imp ...
- WordPress插件制作教程(一): 如何创建一个插件
上一篇还是按照之前的教程流程,写了一篇WordPress插件制作教程概述,从这一篇开始就为大家具体讲解WordPress插件制作的内容.这一篇主要说一下插件的创建方法. 相信大家都知道插件的安装文件在 ...
- re模块
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能 ...
- ActionBar-PullToRefreshLibs+沉浸式在部分手机上的布局错乱,目前知道的三星
前段时间看见ActionBar-PullToRefreshLibs用来刷新很好看,配合4.4以上支持的沉浸式效果更佳,于是便想配合沉浸式+ActionBar-PullToRefreshLibs做出一个 ...
- Theme.AppCompat.Light报错
style文件中的Theme.AppCompat.Light报错,Error retrieving parent for item: No resource found that matches th ...
- MySQL Workbench导出数据库
步骤: 1. 打开mysql workbench,进入需要导出的数据库,点击左侧栏的[Management]tab键. 2. 点选要输出的数据库 点击[Data Export] 选在要输出的数据库 选 ...
- HibernateTemplate和HibernateDaoSupport
Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport HibernateTemplateHib ...
- 委托、Lambda表达式
本文来自:http://wenku.baidu.com/link?url=o9Xacr4tYocCPhivayRQXfIc9kOZeWBwPn2FZfeF19P4-8YX5CMXs74WB-Y8t0S ...
- socketpair的使用
socketpair函数概要例如以下:#include <sys/types.h>#include <sys/socket.h>int socketpair(int domai ...
- Unity NGUI 血条制作
NGUI 血条制作步骤 实现过程: 模拟血条的变化当点击按钮Button是血条会实时发生变化. 1.向Unity中导入NGUI2.6.3.unitypackage 点击create your ui 后 ...