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() 吧? 展开
#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() 吧? 展开
3个回答
展开全部
楼上的回答只点出了你的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++语言本身就有的!
#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++语言本身就有的!
展开全部
////////////////////////////////////////////////////////////////////////////////
vector<base *>* baseclass=new vector<base *> derived;
////////////////////////////////////////////////////////////////////////////////
你这一行有一点问题。
vector<>是一个模板容器,vector<type>是一个类型,new后面是接类型的构造函数,默认构造行数就是类型名,所以你直接把这行改成
////////////////////////////////////////////////////////////////////////
vector<base *>* baseclass=new vector<base *>;
////////////////////////////////////////////////////////////////////////
就可以运行了。但是什么都不会显示。原因是只创建了一个空的vector<base *>类型的容器的指针。要另外往里添加元素才行。
由于我不知道你这个程序的目的是什么,我也只能说到这里了,希望对你有帮助。
vector<base *>* baseclass=new vector<base *> derived;
////////////////////////////////////////////////////////////////////////////////
你这一行有一点问题。
vector<>是一个模板容器,vector<type>是一个类型,new后面是接类型的构造函数,默认构造行数就是类型名,所以你直接把这行改成
////////////////////////////////////////////////////////////////////////
vector<base *>* baseclass=new vector<base *>;
////////////////////////////////////////////////////////////////////////
就可以运行了。但是什么都不会显示。原因是只创建了一个空的vector<base *>类型的容器的指针。要另外往里添加元素才行。
由于我不知道你这个程序的目的是什么,我也只能说到这里了,希望对你有帮助。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的回答只点出了你的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++语言本身就有的!
#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++语言本身就有的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询