www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第4章/s4_5/smain4_5.cpp

    //Download by http://www.NewXing.com
//主文件
//文件名:ch4_5\smain4_5.cpp

#include "sclass4_5_student.h"	//包含类定义头文件

//主测试程序
void main()    
{
	CPerson oCPerson;	//构造一个CPerson类的对象
	CStudent oCStudent; //构造一个CStudent类的对象

	cout<<"\n1:-通过基类指针调用基类对象----"<<endl;
	CPerson *pCPerson = &oCPerson;					//指向基类CPerson类对象
	pCPerson->ShowName();							//调用CPerson类的ShowName()
	pCPerson->ShowName("德华刘");
	pCPerson->ShowSex("男");
	pCPerson->ShowAge(10);

	cout<<"\n2:-通过基类指针调用派生类对象----"<<endl;
	pCPerson = &oCStudent;							//指向派生类CStudent类对象
	pCPerson->ShowName();							//不具有虚特性,调用基类的
	pCPerson->ShowName("学友张");					//不具有虚特性,调用基类的
	pCPerson->ShowSex("男");						//不具有虚特性,调用基类的
	pCPerson->ShowAge(18);							//虚函数,调用派生类的ShowAge()

	cout<<"\n3:-通过派生类指针调用派生类对象----"<<endl;
	CStudent *pCStudent = &oCStudent;	//指向派生类对象
	//pCStudent->ShowName();			//失败:派生类中有同名函数,把基类的隐藏了
	//oCStudent.ShowName();				//失败:通过对象本身调用也不行
	pCStudent->CPerson::ShowName();		//隐藏的函数可以通过作用域符号调用
	pCStudent->ShowName("学友张");		//基类的ShowName被隐藏
	pCStudent->ShowSex(true);			//基类的ShowSex()被隐藏
	pCStudent->CPerson::ShowSex("女");	//可以通过作用域符号调用基类的ShowSex()
	pCStudent->ShowAge(18);				//基类的ShowAge()被覆盖
	pCStudent->CPerson::ShowAge(10);	//可以通过作用域分辩符调用基类的ShowSex()

	cin.get();  
}