OverLoad和OverRide分析
来源:互联网 发布:mg动画软件 编辑:程序博客网 时间:2024/04/20 04:15
C++的方法Overload机制只能在一个类内部扩展方法名的用途,这一点与Java不同,需要注意,下面自己写了一个小程序以展示,其中顺便也提到了OverRide。
为什么提到OverRide呢,其实我觉得这两者都是用Open-Close原理在语言设计上的具体应用,一个在横向上扩展某个函数名的用途,一个在纵向上扩展某个函数签名的用途。
代码如下,VC++2005验证过:
类型声明代码LoadRide.h如下:
#pragmaonce
classBase{
public:
int A(int);
int A(char*);
virtual int B(int);
virtual int B(char*);
charC(float);
};
classLoadRide:public Base
{
public:
LoadRide(void);
~LoadRide(void);
char A(float); //这里打开,Base的两个A方法就被遮盖了
virtual int B(int);
};
实体定义代码LoadRide.cpp如下:
#include"LoadRide.h"
#include<stdio.h>
intBase::A(int j){
printf("您对Base::int@A@int输入了int值:%i /n",j);
return j;
}
intBase::A(char* c){
printf("您对Base::int@A@char*输入了指针,它指向地址:%p/n",c);
//c++; //危险,这个函数的使用者很可能输入一个引用进来
return *c;
}
intBase::B(int j){
printf("您对Base::int@B@int输入了int值:%i /n",j);
return j;
}
intBase::B(char* c){
printf("您对Base::int@B@char*输入了指针,指向地址:%p/n",c);
//c++; //危险,这个函数的使用者很可能输入一个引用进来
return *c;
}
LoadRide::LoadRide(void)
{
}
LoadRide::~LoadRide(void)
{
}
charLoadRide::A(float f){
printf("您对LoadRide::int@C@char*输入了浮点数:%f/n",f);
return 'c';
}
charBase::C(float f){
printf("您对Base::int@C@char*输入了浮点数:%f/n",f);
return 'c';
}
intLoadRide::B(int j){
printf("您对LoadRide::int@B@int输入了int值:%i /n",j);
return j;
}
intmain(){
LoadRide o;
Base* pb = &o ;
LoadRide* pl = &o;
char c = 'c';
//子类一旦用了函数名A,不论什么参数返回值,父类的A们就不能再直接调用了
//printf("%i/n", o.A(&c));
//printf("%i/n", o.A('c'));
printf("%i/n", pb->A(&c)); //但是被遮住的A却可以用父类类型的指针调用;
//printf("%i/n", pl->A(&c)); //被遮住的A们不能用子类类型的指针调用;
printf("%i/n", o.C(1.0));
printf("%i/n", pb->B(&c));
printf("%i/n", pb->B('c')); //并不是指针类型而是所指向实际对象类型来判断具体成员
pb = &(static_cast<Base>(o));//要调用其它父类或子类override成员,要转换对象类型
printf("%i/n", pb->B('c'));
getchar();
//static_cast可以往父类cast,如果调用了子类成员,编译器会报错
//dynamic_cast只能往成员更多的子类去cast,因为运行期间必须保证对象访问的成员都存在
}
运行结果如下:
您对Base::int@A@char*输入了指针,它指向地址:0013FF33
99
您对Base::int@C@char*输入了浮点数:1.000000
99
您对Base::int@B@char*输入了指针,指向地址:0013FF33
99
您对LoadRide::int@B@int输入了int值:99
99
您对Base::int@B@int输入了int值:99
99
- OverLoad和OverRide分析
- Override和Overload 分析
- Overload和Override的区别及Overload的方法分析
- overload和override
- Overload和Override
- override和overload
- overload,override和overwrite
- Overload,Override和Overwrite
- override和overload
- override和overload
- Overload和Override
- Overload,override和overwrite
- 关于Override和Overload
- overload ,override 和 overwrite
- override和overload
- Override 和 Overload
- Overload 和 Override
- overload和override
- None
- 试试看
- 两款免费软件,合起来可以替代UltraEdit,推荐给大家!
- Cfquery排序的一个小问题
- Flash、Flex资源收集之十全大补
- OverLoad和OverRide分析
- 看看CSDN放了什么信息到Cookie里面
- hibernate 一路走来(从错误一大堆到可以操作数据库)
- 绿色下载:CYY屏幕截图助手1.3
- IK1550 Internetworking/Internetteknik
- 这么注释管用么?
- 忘记自己,超越自己
- [IE技巧] 如何关闭Windows Server版IE的安全限制
- 这几天求职经历!