(C++)C++类继承中的构造函数和析构函数

思想:

在C++的类继承中,

建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推;

析构对象时,其顺序正好与构造相反;

例子:

#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 0;
}

结果:

时间: 2024-08-10 17:17:21

(C++)C++类继承中的构造函数和析构函数的相关文章

虚基类 继承中的构造函数

/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:d.cpp *作 者:张旺华 *完成日期:2015年6月1日 *版 本 号:v1.0 */ #include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<

python学习笔记——旧类与新类继承中的构造函数

旧类以调用未绑定的超类构造方法 class OldDog: def __init__(self): print 'I am a old dog !' self.__hungry = True def eat(self): if self.__hungry: print 'I eat it !' self.__hungry = False else: print 'No thanks!' class OldWolf(OldDog): def __init__(self): OldDog.__ini

类继承时,构造函数和析构函数的调用次序

比如,apple类是fruit类的子类,当执行apple a("红富士");的时候,将先调用fruit类的构造函数,再调用apple类的构造函数 同理,假设在程序里先后声明了两个apple实例: apple a(“红富士"); apple b("青香蕉"); 当函数退出时,要先销毁b,再销毁a(因为b在栈顶). 而调用析构函数时,先调用apple的析构函数,再调用fruit的析构函数. 综上可见,构造函数和析构函数的调用次序恰好反了个个儿. Java和C+

【TOJ 5254】C++实验:继承中的构造函数和析构函数

描述 实现C++类Base和Derived,并编写相关构造函数和析构函数,使其能够输出样例信息. 主函数里的代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { Base *p = new Derived(1, 2); delete p; Base b; Derived d; return 0; } 输入 无 输出 输出样例信息. 样例输入 无 样例输出 Base Constructor 1Derived Constructor 2Derived Destructo

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

继承中的构造函数

构造函数的作用:初始化对象, 继承的两个特性:单根性,和传递性. 一:一个类中可以存在多个构造函数,他们实现一个重载关系.构造函数之间会造成冗余的情况. 列如: 解决办法就是用this来解决冗余问题. this 有两个作用:1.表示当前类的对象.2.解决本类中出现的冗余问题. 二:继承中构造函数. 继承:即子类(派生类)继承父类(基类)的属性和方法,在这个过程中发生的过程: 1.为子类实例化对象时,系统会默认为父类实例化对象,(默认调用的是空构造函数)调用父类的属性和方法,然后才实例化子类对象.

C++类继承中内存的布局

1 前言       了解你所使用的编程语言究竟是如何实现的,对于C++程序员可能特别有意义.首先,它可以去除我们对于所使用语言的神秘感,使我们不至于对于编译器干的活感到完全不可思议:尤其重要的是,它使我们在Debug和使用语言高级特性的时候,有更多的把握.当需要提高代码效率的时候,这些知识也能够很好地帮助我们. 本文着重回答这样一些问题: 1* 类如何布局? 2* 成员变量如何访问? 3* 成员函数如何访问? 4* 所谓的"调整块"(adjuster thunk)是怎么回事? 5*

JAVA继承中的构造函数

ps:因为顺口...我喜欢把方法称为函数 1) 一个单独的类,如果没有声明任何构造函数,那么系统会自动生成一个无参的构造函数,此时,new classA() 不会报错. ! 如果显式声明了一个有参构造函数,再使用 new classA(无参) 将会报错,因为在已有情况下系统不会帮助生成无参构造,建议自己添加一个无参构造函数 ---一个类的构造函数只会有三种状况:无参    /   无参+有参    /   有参 2) 如果存在继承关系,假设classB extends classA , 子类的所

C# 类型运算符重载在类继承中的调用测试

这是一篇晦涩难懂的片面的研究 一,简单的继承层次 class CA { } class CB : CA{ } class CC : CB{ } } void Test(CA oa){//CATest Debug.Log ("CA==============="); } void Test(CB oa){//CBTest Debug.Log ("CB==============="); } void Test(CC oa){//CCTest Debug.Log (&q