类型问题
#include<iostream>
using namespace std;
class str
{
public:
void cou();
};
void str::cou()
{
cout<<"it is str"<<endl;
};
class str1:public str
{
public:
void cou();
};
void str1::cou()
{
cout<<"it is str1;"<<endl;
};
class str2:public str
{
public:
void cou();
};
void str2::cou()
{
cout<<"it is str2"<<endl;
};
void fun(str *p)
{
p->cou();
}
void main()
{
str s;
str1 s1;
str2 s2;
str *p;
p=&s;
fun(p);
p=&s1;
fun(p);
p=&s2;
fun(p);
}
为什么是输出三个 it is str;
而不是 it is str;
it is str1;
it is str2;
问题点数:0、回复次数:7Top
1 楼xteaj(半桶水)回复于 2005-05-01 11:11:47 得分 0
你又没用virtual,所有函数调用都直接调用str*类型的函数,这个结果你已经知道了。Top
2 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-05-01 11:12:20 得分 0
你的str的cout没声明成virtual,
是静态绑定的.
所以都是输出的是str的coutTop
3 楼crybird(寒号鸟)回复于 2005-05-01 11:12:59 得分 0
因为cou()不是虚函数Top
4 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-05-01 11:13:54 得分 0
把cou设为虚函数Top
5 楼useresu(俗人)(灌水是我无言的抗议)回复于 2005-05-01 11:15:22 得分 0
上边写错了,不是cout,是cou,
静态绑定是因你的指针类型而定的调用什么什么类型的函数,
不会为每个对象产生虚函数表的
只有动态绑定才会根据你的具体对象的类型调用具体的函数.
Top
6 楼llf_hust()回复于 2005-05-02 17:28:12 得分 0
#include<iostream>
using namespace std;
class str
{
public:
virtual void cou();
};
Top
7 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-05-02 17:51:10 得分 0
加virtual,才能实现动态绑定。Top




