虚函数和作用域(C++ primer 第五版)P550

一、程序

#include "stdafx.h"
#include "iostream"
using namespace std;

class Base
{
public:
	virtual void fun(){cout<<"Base::fun()"<<endl;}
};

class Derived1 : public Base
{
public:
	void fun(int n){cout<<n<<" Derived1:fun(int)"<<endl;} /* 新加,隐藏 */
	virtual void fun2(){cout<<"Derived1::fun2()"<<endl;} /* 新加 */
};

class Derived2 : public Derived1 
{
public:
	virtual void fun(){cout<<"Derived2:fun()"<<endl;} /* 新加,virtual,覆盖 */
	void fun(int n){cout<<n<<" Derived2:fun(int)"<<endl;} /* 新加,隐藏 */
	virtual void fun2(){cout<<"Derived2::fun2()"<<endl;} /* 新加,virtual,覆盖 */
};

int _tmain(int argc, _TCHAR* argv[])
{
	Base base;
	Derived1 der1;
	Derived2 der2;
	
	Base *pb = &base, *pd1 = &der1, *pd2 = &der2;
	pb->fun(); /* Base::fun() */
	pd1->fun(); /* Base::fun() */
	pd2->fun(); /* Derived2:fun() */
	cout<<endl;
	//pb->fun2(); /* error:fun2不是base的成员 */
	//pd1->fun2(); /* error:fun2不是base的成员 */
	//pd2->fun2(); /* error:fun2不是base的成员 */

	Derived1 *pdd1 = &der1, *pdd2 = &der2;
	pdd1->fun2(); /* Derived1::fun2() */
	pdd2->fun2(); /* Derived2::fun2() */
	
	pdd1->fun(1); /* 1 Derived1:fun(int) */
	pdd2->fun(2); /* 2 Derived1:fun(int), 注意fun(int)不是虚函数 */

	//pdd1->fun(); /* error:Derived1中fun()函数已经被fun(int)隐藏 */
	//pdd2->fun(); /* error:Derived1中fun()函数已经被fun(int)隐藏 */
	cout<<endl;
	
	Derived2 *pddd2 = &der2;
	pddd2->fun(); /* Derived2:fun() */
	pddd2->fun2(); /* Derived2::fun2() */
	pddd2->fun(3); /* 3 Derived2:fun(int) */

	return 0;
}



二、运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值