c++关于抽象类的一个问题,新手求帮助。。。

GPU小码农 2013-12-08 08:24:03
#include <iostream.h>
class A
{
private:
//…其它成员
public:
virtual void func(int data)
{
cout<<"class A:"<<data<<endl;
}
void func(char *str)
{
cout<<"class A:"<<str<<endl;
}
};

class B: public A
{
//…其它成员
public:
void func()
{
cout<<"function in B without parameter! \n";
}
void func(int data)
{
cout<<"class B:"<<data<<endl;
}
void func(char *str)
{
cout<<"class B:"<<str<<endl;
}
};

void main()
{
A *pA;
B b;
pA=&b;
pA->func(1);
pA->func("haha");
pA->func();//为什么不能调用呢?难道只能调用抽象类规定好的函数?
// return 0;
}
...全文
235 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
因为class A里根本就没有func()呀......,虽然pA实际指向的B类型的对象,但是其类型是A,就决定了,其所能进行的操作呀. 另个再说一下,你这根本就不是抽象类呀

class A
{
private:
  //…其它成员
public:
  virtual void func(int data)=0      //这样才叫抽象类呀,楼主补下基础呀
  {
      cout<<"class A:"<<data<<endl;
  }
  void func(char *str)
  {
      cout<<"class A:"<<str<<endl;
  }
};
lm_whales 2013-12-09
  • 打赏
  • 举报
回复
((B*)pA)->func();?????
测试NULL 2013-12-09
  • 打赏
  • 举报
回复
我可以给你解释下,pA虽然是 A类型的指针(即A *),但是后来指向了B类的实例,这个只有当B和A存在派生类和超类(子类和父类)的关系才可以这么写 所以本质上 (*pA) 是B类实例,但如果直接 pA->func(); 这样调用,编译器会找不到func,因为编译器没那么聪明,编译器认为(*pA)就是A类型的,尽管它实际上已经是B类型的实例变量了,那怎么让编译器认识呢,就只能强制类型转换了, 不知这样说你会不会清楚一些,以上纯属个人观点
TheMadMan 2013-12-09
  • 打赏
  • 举报
回复
是B的函数,而现在你只是有他的地址而已
qq120848369 2013-12-09
  • 打赏
  • 举报
回复
func()是B的函数。
测试NULL 2013-12-08
  • 打赏
  • 举报
回复
调用是可以的,但是调用的时候必须强转类型:

#include <iostream>
using namespace std;

class A
{
private:
    //…其它成员
public:
    virtual void func(int data)
    {
        cout<<"class A:"<<data<<endl;
    }
    void func(char *str)
    {
        cout<<"class A:"<<str<<endl;
    }
};

class B: public A
{
    //…其它成员
public:
    void func()
    {
        cout<<"function in B without parameter! \n";
    }
    void func(int data)
    {
        cout<<"class B:"<<data<<endl;
    }
    void func(char *str)
    {
        cout<<"class B:"<<str<<endl;
    }
};

int main()
{
    A *pA;
    B b;
    pA=&b;
    pA->func(1);
    pA->func("haha");

    ((B*)pA)->func();
    return 0;
}
dyw 2013-12-08
  • 打赏
  • 举报
回复
func()是B里定义的函数,A根本就不知道,如何调用?

64,648

社区成员

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

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