问一个关于继承的问题

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?也就是上面这个函数改怎么写??谢谢
...全文
108 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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函数

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧