继承机制中的构造器与析构器

本文探讨了C++继承机制中构造器和析构器的工作原理。当创建子类对象时,基类的构造器会被自动调用,而析构器则在子类析构后执行。构造过程按照基类到子类的顺序,析构则相反。通过实例解析了构造和析构的执行顺序。
摘要由CSDN通过智能技术生成

c++支持程序员自己写出将创建或销毁一个对象时,使用的方法,也就是构造器与析构器。1.基类和子类构造函数的调用在没有继承机制的情况下,这些方法在创建或销毁一个对象的时候被调用,比较容易理解,但加入了继承机制,构造器和析构器变得有点复杂。比如基类为Animal(), 子类为Pig。基类有个构造器,子类也有构造器,当子类的对象,即 Pig类的对象在被创建时,将第一步调用基类Animal 的构造器,第二步调用子类Pig的构造器。2.当构造器带着输入参数的情况,例如
class Animal
{
public:
    Animal(std::string theName)
    std::string name;
};
class pig: public Animal{
public:
    Pig(std::string theName);
};

方法的定义方法:

Animal::Animal(std::string theName){
    name = theName;
}
Pig::Pig(std::string thePigName) : Animal(thePigNmae){
}

其中,“:Animal(theName)”语法的含义:

— 当调用Pig()构造器时(以theName 作为输入参数), Animal() 构造器也将会被调用,同时 theName 的输入参数将传递给它。

— 当调用 Pig pig (”小猪“); 将把字符串 ”小猪“ 传递给pig() 和 Animal() , 赋值动作实际发生在Animal() 方法里。


3. 当销毁某个对象时,基类的析构器也会被自动调用,但这些事编译器会自动替你处理。因为析构器不需要输入参数,所以根本用不着使用 

:SuperClassMethod(arguments) 语法。

与构造器相反,基类的析构器 将在子类的最后一条语句执行完毕后才被调用。

执行顺序:


基类构造器 — >  子类构造器 —> 子类析构器 —> 基类析构器


例子:


#include <iostream>
#include <string>

class BaseClass
{
public:
    BaseClass();
    ~BaseClass();

    void doSomething();
};

class SubClass : public BaseClass
{
public:
    SubClass();
    ~SubClass();
};

BaseClass::BaseClass()
{
    std::cout <<"进入基类构造器\n" ;
    std::cout <<"我在基类构造器里做了某些事 \n";
}

BaseClass::~BaseClass()
{
    std::cout << "进入基类析构器 \n";
    std::cout << "我在基类析构器里做了某些事 \n";
}

void BaseClass::doSomething()
{
    std::cout << "我做了某些事" << std::endl;
}

SubClass::SubClass()
{
    std::cout << "进入子类构造器\n";
    std::cout <<  "我在子类构造器里做了某些事" << std::endl;
}

SubClass::~SubClass()
{
    std::cout << "进入子类析构器 " << std::endl;
    std::cout << "我在子类析构器里做了某些事" << std::endl;
}

int main()
{
    SubClass subclass;
    subclass.doSomething();

    std::cout << "All have been down" << std::endl;

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值