C++快速入门---继承机制中的构造器和析构器(11)

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

猜你喜欢

转载自blog.csdn.net/xiaodingqq/article/details/83650828
今日推荐