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

📄 demo_3_polymorphism_virtual_function_1_c.cpp

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

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

#include <iostream.h>

class Member
{
public:
	//虚函数在基类中首次定义时,不能省略关键字virtual
	//否则,在派生类中重新定义时,即使加上关键字virtual也起不到多态作用
	//相当于没有加任何关键字virtual
	void show() 
	{ 
		cout<<"I am a member.\n"; 
		return;
	}
	
};

class Teacher:public Member
{
public:
	virtual void show() //即使加上关键字virtual也起不到多态作用
//	void show()
	{ 
		cout<<"I am a teacher.\n"; 
		return;
	}	 
};

class Student:public Member
{
public:
	virtual void show() //即使加上关键字virtual也起不到多态作用
//	void show()
	{ 
		cout<<"I am a student.\n"; 
		return;
	}	 
};

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

	Member *who;

	who=&member; //基类指针指向基类对象
	who->show();

	who=&teacher; //赋值兼容,基类指针指向派生类对象
	who->show();  //访问基类成员
//	who->Teacher::show(); //Error:没有虚函数,基类指针不可以调用派生类成员
	((Teacher *)who)->show(); //显式强制类型转换恢复派生类的地址后,访问派生类成员
	                          //考虑运算符的优先级,括号是必需的

	who=&student; //赋值兼容,基类指针指向派生类对象
	who->show();  //访问基类成员
//	who->Student::show(); //Error:没有虚函数,基类指针不可以调用派生类成员
	((Student *)who)->show(); //显式强制类型转换恢复派生类的地址后,访问派生类成员
	                          //考虑运算符的优先级,括号是必需的

	return;
}

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

⌨️ 快捷键说明

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