指针的强制转换
指向基类的指针访问子类的同名函数,一种方法是把基类的同名函数声明为虚函数,然后将子类对象的地址赋给基类指针,用该指针调用的函数就是子类的同名函数。还有还有一种办法我不确定,请各位高手指教!把基类指针强制转换成子类类型,然后用转换后的指针调用同名函数,我在vc++环境中运行,结果发现调用的是基类的函数。 问题点数:20、回复次数:11Top
1 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:06:10 得分 2
你说的我好费解。干脆你还是把代码贴上来吧。Top
2 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 11:06:44 得分 2
注意虚表。Top
3 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:11:08 得分 8
#include <iostream>
//给你个例子吧
using namespace std;
class Base{
public:
virtual void f(){
cout<<"Base"<<endl;
}
};
class Derived : public Base{
public:
void f(){
cout<<"Derived"<<endl;
}
};
void main()
{
Derived d;
Base * b = &d;
b->f();
}Top
4 楼nnlucky()回复于 2006-03-17 11:27:05 得分 0
iamcaicainiao 你好!你举的例子是虚函数的例子,这个能实现父类指针访问子类同名函数,还有一种办法,我把代码已经沾上了,你看看是否合理,谢谢!Top
5 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:34:12 得分 1
莫非楼主要这样么:
Derived *d = new d;
Base * b = (Derived *)d;
b->f();
//但是这样还是指向了子类的函数Top
6 楼aniude(重返荣耀)回复于 2006-03-17 11:36:46 得分 1
---------------
上面的结果:
Derived
嘿嘿Top
7 楼aniude(重返荣耀)回复于 2006-03-17 11:38:59 得分 2
覆盖使用了是子类的函数,隐藏的视指针指向的对象而论Top
8 楼nnlucky()回复于 2006-03-17 11:44:10 得分 0
class class1
{
public:
int fun()
{return 100;
}
};
class subclass1:public clsss1
{
public:
int fun()
{return 200;
}
};
int main()
{class1 *p;
p=new subclass1();
int x;
x=((sunclsss1 *)p)->fun();
printf("%d\n",x);//结果是200
}
Top
9 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 14:54:20 得分 1
上面的代码没有错,就是指向子类的函数。Top
10 楼wang1523(大菜鸟)回复于 2006-03-17 21:11:06 得分 3
呵呵,动态调用啊Top
11 楼nnlucky()回复于 2006-03-17 21:23:53 得分 0
虚函数是动态绑定,强制转换应该是静态吧Top




