强制转换类型实现父类指针访问子类同名函数
指向基类的指针访问子类的同名函数,一种方法是把基类的同名函数声明为虚函数。还有还有一种办法我不确定,请各位高手指教!就是把基类指针强制转换成子类类型,然后用转换后的指针调用同名函数,我在vc++环境中运行,结果发现调用的是子类的函数。
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
}
问题点数:20、回复次数:14Top
1 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-17 11:25:46 得分 1
你写出这个事实干吗啊?Top
2 楼nnlucky()回复于 2006-03-17 11:28:19 得分 0
??事实?Top
3 楼wohow()回复于 2006-03-17 11:28:29 得分 5
这是静态联编,可以这样用,前提是强制转换是正确的就行了Top
4 楼du51(郁郁思扬)回复于 2006-03-17 11:29:09 得分 3
把基类指针强制转换成子类类型
p=new subclass1();
x=((sunclsss1 *)p)->fun();Top
5 楼nnlucky()回复于 2006-03-17 11:30:26 得分 0
这也是应该是实现父类指针访问子类同名函数的办法吧Top
6 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:38:10 得分 2
就是呀,这样做没有什么错。Top
7 楼nnlucky()回复于 2006-03-17 11:41:33 得分 0
谢谢了!对于这个强制转换后的指针,此时只能访问子类新增的public成员吗?Top
8 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 11:47:35 得分 3
访问不了子类特有的函数。Top
9 楼nnlucky()回复于 2006-03-17 11:55:57 得分 0
嗯?可以吧,强制转换后可以当成子类的指针使用,这种情况下按理说应该可以访问子类用public声明的函数,如:
class class1
{
public:
int fun()
{return 100;
}
};
class subclass1:public clsss1
{
public:
int fun()
{return 200;
}
int funnew()
{
return 566;
}
};
int main()
{class1 *p;
p=new subclass1();
int x;
x=((sunclsss1 *)p)->fun();
x=((sunclsss1 *)p)->funnew();
printf("%d\n",x);
}
Top
10 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-17 17:06:18 得分 2
x=((sunclass1 *)p)->funnew();//那是指向子类的指针当然可以访问了。Top
11 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-17 17:12:49 得分 0
这不应该叫办法,
应该叫拙略的设计Top
12 楼nnlucky()回复于 2006-03-17 17:19:46 得分 0
adintr 给点鼓励嘛,别那么刻薄Top
13 楼hyallentong(Caniggia)回复于 2006-03-17 17:28:02 得分 3
ms用reinterpret_cast<>稍好一点Top
14 楼Jinhao(辣子鸡丁·GAME就这样OVER了)回复于 2006-03-17 17:59:33 得分 1
如果是多重继承呢?Top




