您的位置:首页 > 编程语言 > C语言/C++

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

2015-08-27 12:58 323 查看

一、程序

#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;
}

二、运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息