问一个关于继承的问题

huche 2004-11-23 06:52:25
class A和class B 是从class T继承过来的
class T中定义了virtual func1 和virtual func2;
class A和class B中都多态了func2但没有多态func1;

func1中会调用func2;
void T::func1()
{
func2(); // 这样会调用T::func2()而不是子类中定义的func2;
}

我现在是想如何可以实现class A和class B的对象调用func1的时候,func1中调用的func2是子类的func2而不是父类的func2?也就是上面这个函数改怎么写??谢谢
...全文
71 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dokee 2004-11-23
不用什么吧,就是直接调用~~~
#include <iostream.h>
class T
{
public:
virtual void func2()
{
cout<<"calling func2"<<endl;
}

void func1()
{
cout<<"calling func1"<<endl;
func2();
}
};

class A :public T
{
public:
virtual void func2()
{
cout<<"calling fun2 in class A"<<endl;
}

};


class B :public T
{
public:
virtual void func2()
{
cout<<"calling fun2 in class B"<<endl;
}

};

void main()
{
A s;
s.func1();
}
回复
imRainman 2004-11-23
楼上正解
回复
goodluckyxl 2004-11-23
carylin(别信我,我在说谎) ( )
第二次应该是对的
调用时 隐藏的this指针应该会在运行时类型识别
找到当前对应的函数
楼主其实写到这样自己一试就有结果了
自己试出来和别人告诉你绝对是两种不同的感觉
http://community.csdn.net/Expert/topic/3426/3426426.xml?temp=.9431116
可以看看多态的理解
有问题可以探讨 短信
回复
horisly 2004-11-23
#include<iostream>

using namespace std;

class T{
public:
virtual void fun1(){
std::cout<<"Call T::fun1()\n";
fun2();
}
void fun2(){
std::cout<<"Call T::fun2()\n";
}
};

class A:public T{
public:
void fun1(){
std::cout<<"Call A::fun1()\n";
fun2();
}
void fun2(){
std::cout<<"Call A::fun2()\n";
}
};

void main(){
A sample;
sample.fun1();
}
回复
horisly 2004-11-23
class T中定义了virtual func1 和virtual func2; ????
func2不是已经为虚函数了吗?
回复
carylin 2004-11-23
写错了。就是写成你这样就行了。
class T
{
public:
virtual void func1()
{
func2();
}
virtual void func2(){cout << "T::func2" << endl;}
};

class A : public T
{
public:
virtual void func2(){cout << "A::func2" << endl;}
};

class B : public T
{
public:
virtual void func2(){cout << "B::func2" << endl;}
};
int main()
{
T t;
t.func1();
A a;
a.func1();
B b;
b.func1();
return 0;
}
回复
carylin 2004-11-23
只能是class A,class B也多态func2函数
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告