C++ 继承机制中的构造器和析构器

/*
	在销毁某个对象时,基类的析构器也将被自动调用,
	但这些事情编译器会自动替你处理 

	因为析构器不需要输入参数,
	所以根本用不着使用:SuperClassMethod(arguments)
	语法 
	
	构造器第一执行 
	与构造器情况相反,基类的析构器
	将在子类的最后一条语句执行完毕之后才会被调用 
*/


//example 1

 
//#include <iostream>
//#include <string>
//
基类 
//class Animal
//{
    
    
//	public:
//		std::string mouth;
//		std::string name;
//		//加入构造器
//		Animal(std::string theName);
//		 
//		void eat();
//		void sleep();
//		void drool();
//};
//
构造器使用 
//Animal::Animal(std::string theName)
//{
    
    
//	name=theName; 
//}
子类 
//class Pig:public Animal
//{
    
    
//	public:
//		void climb();
//		Pig(std::string theName);
//};
//
构造器继承
//Pig::Pig(std::string theName):Animal(theName) 
//{
    
    
//	
//}
//
//class Turtle:public Animal
//{
    
    
//	public:
//		void swim();
//		Turtle(std::string theName);
//};
//
构造器继承
//Turtle::Turtle(std::string theName):Animal(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; 
//} 
//
//void Pig::climb()
//{
    
    
//	std::cout << "我在爬树我是猪" <<std::endl; 
//}
//
//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;	
//} 


//example 2

#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<<"我干了某些事\n"; 
} 

//子类构造器定义
SubClass::SubClass()
{
    
    
	std::cout<<"进入子类构造器\n"; 
	std::cout<<"我在子类构造器中还干了某些事\n";
} 

//子类析构器定义
SubClass::~SubClass()
{
    
    
	std::cout<<"进入子类析构器\n";
	std::cout<<"我在子类析构器中还干了某些事\n";
} 

//主函数 
int main()
{
    
    
	//子类声明
	SubClass subclass;
	subclass.doSomething();
	std::cout<<"完事,收工\n"; 
	return 0;
} 

//查看执行顺序 


猜你喜欢

转载自blog.csdn.net/qq_48167493/article/details/121249220
今日推荐