C++ vector 里存放基类指针,指向派生类对象

#include<iostream>#include<string.h>#include<vector>usingnamespacestd;classbase{publi... #include<iostream>
#include<string.h>
#include<vector>

using namespace std;

class base
{
public:
virtual void print();
};

class derived : public base
{
public:
virtual void print();
};

void base::print()
{
cout<<"\n IN Base"<<endl;
}

void derived :: print()
{
cout<<"\n IN derived"<<endl;
}

int main()
{
vector<base *>* baseclass=new vector<base *> derived;
vector<base *>::iterator iter;
for(iter=(*baseclass).begin();iter != (*baseclass).end(); iter++)
{
(*(*iter)).print();
}
system("pause");
return 0;
}

为什么不能运行? 如果排除错误后,能运行了,C++ vector 里存放基类指针,指向派生类对象,能多肽吗? 因为基类指针指的是派生类对象,应该会调用派生类的虚函数 print() 吧?
展开
 我来答
q嘿仔
推荐于2016-07-27 · TA获得超过2879个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:181万
展开全部
楼上的回答只点出了你的C++使用的语法错误之处,但是他并没有给出能让你理解的你想要的解决方法,那么我下面便是:

#include <iostream>
#include <vector>

using namespace std;

class Base
{
public:
virtual void print();
};

class Derived : public Base
{
public:
virtual void print();
};

void Base::print()
{
std::cout << "\n IN Base" << std::endl;
}

void Derived :: print()
{
std::cout << "\n IN derived" << std::endl;
}

int main()
{
vector<Base*> baseclass;
Base* ptrDerived = new Derived;
baseclass.push_back(ptrDerived);
Base* ptrBase = new Base;
baseclass.push_back(ptrBase);
baseclass.push_back(new Derived);

vector<Base*>::const_iterator iter;
for(iter = baseclass.begin(); iter != baseclass.end(); ++iter)
{
(*iter)->print();
}
system("pause");
return 0;
}

其运行结果就是先Derived,后Base, 然后又是Derived。
注意push_back是值传递。此处多态体现是标准C++语言本身就有的!
百度网友81e346144
2010-03-02
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
////////////////////////////////////////////////////////////////////////////////
vector<base *>* baseclass=new vector<base *> derived;
////////////////////////////////////////////////////////////////////////////////

你这一行有一点问题。

vector<>是一个模板容器,vector<type>是一个类型,new后面是接类型的构造函数,默认构造行数就是类型名,所以你直接把这行改成
////////////////////////////////////////////////////////////////////////
vector<base *>* baseclass=new vector<base *>;
////////////////////////////////////////////////////////////////////////

就可以运行了。但是什么都不会显示。原因是只创建了一个空的vector<base *>类型的容器的指针。要另外往里添加元素才行。

由于我不知道你这个程序的目的是什么,我也只能说到这里了,希望对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旷荡虢锐阵
2019-07-17 · TA获得超过3893个赞
知道大有可为答主
回答量:3083
采纳率:25%
帮助的人:205万
展开全部
楼上的回答只点出了你的C++使用的语法错误之处,但是他并没有给出能让你理解的你想要的解决方法,那么我下面便是:
#include
<iostream>
#include
<vector>
using
namespace
std;
class
Base
{
public:
virtual
void
print();
};
class
Derived
:
public
Base
{
public:
virtual
void
print();
};
void
Base::print()
{
std::cout
<<
"\n
IN
Base"
<<
std::endl;
}
void
Derived
::
print()
{
std::cout
<<
"\n
IN
derived"
<<
std::endl;
}
int
main()
{
vector<Base*>
baseclass;
Base*
ptrDerived
=
new
Derived;
baseclass.push_back(ptrDerived);
Base*
ptrBase
=
new
Base;
baseclass.push_back(ptrBase);
baseclass.push_back(new
Derived);
vector<Base*>::const_iterator
iter;
for(iter
=
baseclass.begin();
iter
!=
baseclass.end();
++iter)
{
(*iter)->print();
}
system("pause");
return
0;
}
其运行结果就是先Derived,后Base,
然后又是Derived。
注意push_back是值传递。此处多态体现是标准C++语言本身就有的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式