[C++] 如何使用父类调用子类的函数实现

slowfastflow 2014-06-30 05:46:04

class A
{
public:
A();
~A();
virtual void fun(string str1, string str2) = 0;
}

class B: public A
{
public:
B();
~B();
virtual void fun(string str1, string str2)
{
cout << str1.c_str() << str2.c_str() << endl;
}
}

class C
{
public:
C();
~C();
……
void fun2(A* a);
……
protect:
typedef std::list<A*> A_LIST;
A_LIST m_alist;
typedef std::list<string> S_LIST;
S_LIST m_slist;

string m_str;
pthread_t m_metux;
……
}

C::fun2(A*a)
{
if(a == NULL)
return;

pthread_mutux_lock(m_metux);
m_alist.push_back(a);
m_alist.unique();

S_LIST:const_iterator iter = m_slist.begin();
for(; iter != m_slist.end(); ++iter) {
string idetity = (*iter);
a->fun(m_str, idetity);
}
}


如何使用函数 fun2?


int main(int argc, char ** argv)
{
A* p = new A;

// C::fun2(p);

return 0;
}
...全文
4774 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
slowfastflow 2014-08-04
  • 打赏
  • 举报
回复
类A是一个抽象类,为一个接口,可以调用其子类的实现。 其实可以 new 一个B,将其对象作为参数作为 fun2函数的实参。
baichi4141 2014-07-02
  • 打赏
  • 举报
回复
论神奇的标题
A* pA = new B;
C* pC = new C;
pC->fun2(pA);
xiaohuh421 2014-07-02
  • 打赏
  • 举报
回复
父类调用子类实现, 这就是虚函数的基本功能啊.
slowfastflow 2014-07-02
  • 打赏
  • 举报
回复
前面的类都是 写好确定的代码,main里面是试着对该代码进行测试,所以我只能在main里操作。
jamesguo37 2014-07-01
  • 打赏
  • 举报
回复
A* p = new A;这个应该改不然调不到,因为object没有这个函数 可以改为如下:

class C
{
    public:
        C();
        ~C();
        ……
        static void fun2(A* a);
        ……
    protect:
        typedef std::list<A*> A_LIST;
        A_LIST  m_alist;
        typedef std::list<string> S_LIST;
        S_LIST m_slist;
  
        string m_str;
        pthread_t m_metux;
        ……
}
小竹z 2014-07-01
  • 打赏
  • 举报
回复
main函数里面不应该new A,因为A是一个抽象类,通过父类调用子类的函数实现,这就是多态的意思,楼主可以看看c++多态是怎么实现的~
风划雪月 2014-06-30
  • 打赏
  • 举报
回复
声明为static函数,非static函数,必须和object绑定,也就是说 和*this 绑定
mrlgy 2014-06-30
  • 打赏
  • 举报
回复
你这段代码感觉有很多问题,你写来干什么的?

65,187

社区成员

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

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