您的位置:首页 > 其它

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

2015-09-06 21:56 323 查看
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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: