C++父类指针数组存放子类指针元素

liyi05 2012-05-19 10:24:11
我设定两个类。class A
{
public:
virtual void draw();
};
class B:public A
{
void draw();
};

然后,定义一个动态数组。
vector<A *> drawlist;
里边存放B类的指针,最后调用的时候,却是A类的draw()函数,这是怎么回事儿啊?
...全文
363 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-06-09
  • 打赏
  • 举报
回复
参考代码:

#include <iostream>
#include <vector>
using namespace std;

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

class B : public A
{
public:// 这里最好加上一个public:
void draw()
{
cout << "B::draw()" << endl;
}
};

int main(int argc, char* argv[])
{
vector<A*> vec;
vec.push_back(new B);

for(vector<A*>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
{
(*iter)->draw();
delete *iter;
}

return 0;
}
mars_man 2012-06-09
  • 打赏
  • 举报
回复
与B类里的draw是public和private根本就毫无关系,LZ代码的问题。把代码贴出来才能知道问题。
jiandingzhe 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

指针是指向B类对象么?若是指向A类对象那就本应该是调用A累draw的
[/Quote]
呃,不好意思看错了。
jiandingzhe 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

指针是指向B类对象么?若是指向A类对象那就本应该是调用A累draw的
[/Quote]
虚函数。
bladelyer 2012-05-21
  • 打赏
  • 举报
回复
指针是指向B类对象么?若是指向A类对象那就本应该是调用A累draw的
zhjf14 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

那是因为你把B类的draw定义为protected了。你把这个函数前面的访问权限修改为public,就没有问题了。


有个笔误:“那是因为你把B类的draw定义为protected了”应该是“那是因为你把B类的draw定义为private了”,因为类的成员缺省的是private
[/Quote]
对的。
pathuang68 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

那是因为你把B类的draw定义为protected了。你把这个函数前面的访问权限修改为public,就没有问题了。
[/Quote]

有个笔误:“那是因为你把B类的draw定义为protected了”应该是“那是因为你把B类的draw定义为private了”,因为类的成员缺省的是private
W170532934 2012-05-19
  • 打赏
  • 举报
回复
那是因为你把B类的draw定义为protected了。你把这个函数前面的访问权限修改为public,就没有问题了。

24,856

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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