⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_3_polymorphism_virtual_function_1_b.cpp

📁 对于一个初涉VC++的人来书
💻 CPP
字号:

//***************************************************
// 多态性和虚函数
//***************************************************

#include <iostream.h>
# include <stdlib.h>

class Member
{
public:
	//虚函数在基类中首次定义时,不能省略关键字virtual
	virtual void show() 
	{ 
		cout<<"I am a member.\n"; 
		return;
	}
	
};

class Teacher:public Member
{
public:
	//虚函数在派生类中重新定义时,可省略关键字
//	virtual void show()
	void show() 
	{ 
		cout<<"I am a teacher.\n"; 
		return;
	}	 
};

class Student:public Member
{
public:
	//虚函数在派生类中重新定义时,可省略关键字
//	virtual void show()
	void show() 
	{ 
		cout<<"I am a student.\n"; 
		return;
	}	 
};

void main()
{
	Member member;
	Teacher teacher;
	Student student;

	cout<<"***************************"<<endl;
//===================================================================

	Member *who;

	who=&member;
	who->show();

	who=&teacher;         //赋值兼容
	who->show();          //虚函数多态调用
	who->Member::show();  //绕过多态机制,直接调用基类虚函数

	who=&student;         //赋值兼容
	who->show();          //虚函数多态调用
	who->Member::show();  //绕过多态机制,直接调用基类虚函数

	cout<<"***************************"<<endl;
//===================================================================

//	Member &rM; //Error: 'rM' : references must be initialized
	Member &rM=member;
	rM.show();
	
	rM=teacher;
	rM.show(); 

	rM=student;
	rM.show(); 

	Member &rMt=teacher; //赋值兼容
	rMt.show();          //虚函数多态调用

	Member &rMs=student; //赋值兼容
	rMs.show();          //虚函数多态调用

	cout<<"***************************"<<endl;
//===================================================================

	//动态绑定必须使用基类对象的指针或引用来访问虚函数才可实现
	//直接使用对象无法获得多态性
	member.show();
	member=teacher;
	member.show();
	member=student;
	member.show();

	cout<<"***************************"<<endl;
//===================================================================

	return;
}

/*
***************************
I am a member.
I am a teacher.
I am a member.
I am a student.
I am a member.
***************************
I am a member.
I am a member.
I am a member.
I am a teacher.
I am a student.
***************************
I am a member.
I am a member.
I am a member.
***************************
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -