demo_3_polymorphism_virtual_function_1_b.cpp

来自「对于一个初涉VC++的人来书」· C++ 代码 · 共 121 行

CPP
121
字号

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

#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 + =
减小字号Ctrl + -
显示快捷键?