C++快速入门---继承机制中的构造器和析构器(11)
比如基类有个构造器,如Animal(),它将在创造Pig类型的对象时最先被调用,如果Pig类也有一个构造器,它将排在第二个被调用。因为基类必须在子类之前初始化原则!(先有老爸,再有儿子)
Animal::Animal(std::string theName)
{
name = theName;
}
Pig::Pig(std::string theName) : Animal(theName)
{
}
在子类的构造器定义的“: Animal(theName)",其语法的含义是:当调用Pig()构造器时(以theName作为输入参数),Animal()构造器也将被调用(theName输入参数将传递它)
子类在创建对象、实例时,先调用父类的构造方法,再调用自己的构造方法(先有父亲,再有儿子)。调用完子类后,先调用子类的析构器,然后再调用父类的析构器。一层一层的递进。
代码如下:
#include <iostream>
#include <string>
class Animal//基本
{
public:
std::string mouth;//嘴巴
std::string name;
Animal(std::string theName);
void eat();
void sleep();
void drool();//流口水
};
//Pig继承于Animal
class Pig : public Animal
{
public:
void climb();//上树
Pig(std::string theName);
};
class Turtle : public Animal
{
public:
void swim();
Turtle(std::string theName);
};
Animal::Animal(std::string theName)
{
name = theName;
}
void Animal::eat()
{
std::cout << "I'm eatting!" << std::endl;
}
void Animal::sleep()
{
std::cout << "I'm sleeping!Don't disturb me!" << std::endl;
}
void Animal::drool()
{
std::cout << "我是公的,看到母的我会流口水,我正在流口水。。。" << std::endl;
}
Pig::Pig(std::string theName) : Animal(theName)
{
}
void Pig::climb()
{
std::cout << "我是一只漂亮的小母猪猪,我会上树,我正在爬树。。嘘。。" << std::endl;
}
Turtle::Turtle(std::string theName) : Animal(theName)
{
}
void Turtle::swim()
{
std::cout << "我是一只小甲鱼,当母猪想抓我的时候,我就游到海里。。哈哈。。" << std::endl;
}
int main()
{
Pig pig("小猪猪");
Turtle turtle("小甲鱼");
std::cout << "这只猪的名字是:" << pig.name << std::endl;
std::cout << "每只乌龟都有个伟大的名字:" << turtle.name << std::endl;
pig.eat();
turtle.eat();
pig.climb();
turtle.swim();
return 0;
}
代码如下:
子类在创建对象、实例时,先调用父类的构造方法,再调用自己的构造方法。调用完子类后,先调用子类的析构器,然后再调用父类的析构器。一层一层的递进。
#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\n";
}
BaseClass::~BaseClass()
{
std::cout << "进入基类析构器。。。。\n";
std::cout << "我在基类析构器里边也干了某些事。。。。\n\n";
}
void BaseClass::doSomething()
{
std::cout << "我干了某些事。。。。\n\n";
}
SubClass::SubClass()
{
std::cout << "进入子类构造器。。。。\n";
std::cout << "我在子类构造器里边还干了某些事。。。。\n\n";
}
SubClass::~SubClass()
{
std::cout << "进入子类析构器。。。。\n";
}
int main()
{
SubClass subclass;
subclass.doSomething();
std::cout << "完事,收工";
return 0;
}