c++语言中class中的virtual函数的隐藏和屏蔽
来源:互联网 发布:数控g92车螺纹怎么编程 编辑:程序博客网 时间:2024/05/08 10:11
经过自己的实验,结合网上的资料,在此发表自己的理解,希望能指出我的错误,感激不尽;(VS2010通过)
#include<iostream>
#include<string>
using namespace std;
class assiment
{
public:
int price;
virtual void show(){
cout<<"price: "<<price<<endl; }
assiment(int nu):price(nu){}
};
class Boss:public assiment
{
string name;
public:
virtual void show(){
cout<<"price: "<<price<<endl;
cout<<"name: "<<name<<endl;
}
Boss(int num,string n):assiment(num),name(n){}
};
int main()
{
assiment *ptr;
Boss *p;
assiment ass(2000);
Boss shao(5000,"shao");
//调用基类指针指向Boss子类
ptr=&shao;
ptr->show();
//调用基类指针指向基类
ptr=&ass;
ptr->show();
//调用子类指针指向子类
p=&shao;
p->show();
//调用子类指针指向基类
//p=&ass;//显示错误,证明赋值兼容是不可逆的
//p->show();
system("pause");
return 0;
}
我定义两个简单的类,把assiment作为基类,而Boss类public继承assiment类,然后调用基类assiment类指针分别调用;
virtual函数和非virtual函数的区别到底在哪里呢?
大家可以参照结果:
非vitual show()函数的结果: virtual show()函数的结果
price: 5000 price: 5000
price: 2000 name: shao
price: 5000 price: 2000
name: shao price: 5000
name: shao
非virtual show()函数的结果只是:
对于调用show()函数的时候把子类对象shao的从基类assiment继承来的成员price调用基类的函数,可见Boss的show()函数被屏蔽了,使用子类Boss对象的继承的成员的值执行基类的成员函数,这就是屏蔽;
而virtual show()函数的结果就是:
对于不同的对象调用相对应的成员函数,意思就是能够通过使用一个基类的指针操作子类所对应的virtual函数,这个指针可以是函数参数,可以是main()里指针调用,
virtual函数使得c++更加灵活;
切记:virtual继承和virtual函数是不同的,virtual继承是使得继承的成员只有一份,减少内存的占用,和virtual 函数是不同的两个概念。
楼主是个小新手。有什么错误还请指出;
- c++语言中class中的virtual函数的隐藏和屏蔽
- class中virtual函数和virtual函数=0的意义
- C语言中字符串函数后隐藏的危险陷阱
- C语言中字符串函数后隐藏的危险陷阱
- C#virtual详解,virtual和构造函数的问题
- 在C中引用C++语言中的函数和变量
- C语言中隐藏输入的代码
- [C/C++]关于C++类成员函数的重载、覆盖、隐藏与virtual关键字
- C#.NET 虚方法中中的virtual 和override关键字的使用
- C#.NET 虚方法中中的virtual 和override关键字的使用
- C语言中的函数和函数指针
- C语言中自定义函数和函数的使用方法
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别?
- c语言中static 函数和普通函数的区别?
- 0-1 背包问题、背包问题、最优装载问题、哈夫曼编码,这几个问题的思想是什么?
- 【将金令】1.3预测:非农决定多空博弈
- 20150102
- Web 新租用了一个域名和虚拟主机
- 考研也考完了,继续ACM。
- c++语言中class中的virtual函数的隐藏和屏蔽
- “NPC”程序员涉足游戏行业初体验
- 10.3.1 树处理的难点
- iOS中如何生成变暗的图片
- Javascript 设计模式 -- Singleton(单例)模式
- 1分钟让别人喜欢你(三)
- 【BNU校赛】F. Star Trek: First Contact(裸0-1背包)
- NSString应该用initWithFormat? 还是 stringWithFormat?
- 演练:使用 Microsoft Expression Blend 创建按钮