虚函数和作用域(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;
}
二、运行结果
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- c#中虚函数的相关使用方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息