由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 还请教一个关于C++的问题
相关主题
请教c++的string vector问题,谢谢! (转载)C++ head files help~
C++ 有现成的 hashtable 库吗?Question about
auto_ptr_array.h 疑问请教一个弱弱问题,关于#include的pathname
[合集] 问个面试题how to use hashtable in C++
问个弱问题请教有关header file的几个问题
c++ std::abs(int) ambiguous?添加C++ std lib
多线程有什么优化的方法?Intel C++ compiler 求教
namespace defined in another fileC 和 C++ 的区别
相关话题的讨论汇总
话题: tellme话题: 子类话题: vector话题: include话题: int
进入Programming版参与讨论
1 (共1页)
q***s
发帖数: 2243
1
做一个程序,一个父类(A),下面有几个子类(比如B),所有子类的实例都放在一个
vector的集合中,集合中的对象当然都是父类型的了。但是我发现问题,如果从集合中
取出实例,这时就不能调用子类的override的函数了(比如tellMe)。下面是我的一个
测试程序,请各位指点一下:
// main.cpp
#include "A.h"
#include "B.h"
#include
using namespace std;
int main()
{
vector vec;

for(int i=0; i<10; i++)
{
A* a = new B();
a->tellMe();
vec.push_back(*a);
}
for(int i=0; i<10; i++)
{
((A)vec[i]).tellMe(i*8);
}
return 0;
}
====================
// A.h
#ifnd
G****n
发帖数: 618
2
slicing

【在 q***s 的大作中提到】
: 做一个程序,一个父类(A),下面有几个子类(比如B),所有子类的实例都放在一个
: vector的集合中,集合中的对象当然都是父类型的了。但是我发现问题,如果从集合中
: 取出实例,这时就不能调用子类的override的函数了(比如tellMe)。下面是我的一个
: 测试程序,请各位指点一下:
: // main.cpp
: #include "A.h"
: #include "B.h"
: #include
: using namespace std;
: int main()

q***s
发帖数: 2243
3
能给个详细的说明么,看不懂你这么说的.
我的问题是关键我不能事先知道是子类还是父类,即便是子类,也有多个.

【在 G****n 的大作中提到】
: slicing
p****o
发帖数: 1340
4
store pointers instead of objects in a vector. there is also memory
leak in ur code.

【在 q***s 的大作中提到】
: 做一个程序,一个父类(A),下面有几个子类(比如B),所有子类的实例都放在一个
: vector的集合中,集合中的对象当然都是父类型的了。但是我发现问题,如果从集合中
: 取出实例,这时就不能调用子类的override的函数了(比如tellMe)。下面是我的一个
: 测试程序,请各位指点一下:
: // main.cpp
: #include "A.h"
: #include "B.h"
: #include
: using namespace std;
: int main()

t****t
发帖数: 6806
5
三个典型错误:
1. virtual函数,父子类之间的缺省参数值应该相同。换句话说,缺省参数值不是
dynamic bind的。
2. 数组不能和继承一起用,即数组里元素类型必须完全相同,就算是父子类也不行。
3. 你指望op=能把A变成B?
A* a1=new B; // a指向一个B
A a2=*a1; // a2永远是个A,不会这样就变成B的

【在 q***s 的大作中提到】
: 做一个程序,一个父类(A),下面有几个子类(比如B),所有子类的实例都放在一个
: vector的集合中,集合中的对象当然都是父类型的了。但是我发现问题,如果从集合中
: 取出实例,这时就不能调用子类的override的函数了(比如tellMe)。下面是我的一个
: 测试程序,请各位指点一下:
: // main.cpp
: #include "A.h"
: #include "B.h"
: #include
: using namespace std;
: int main()

q***s
发帖数: 2243
6
谢谢!
果真呢!!!
为什么保存对象本身不行呢?

【在 p****o 的大作中提到】
: store pointers instead of objects in a vector. there is also memory
: leak in ur code.

q***s
发帖数: 2243
7
一句话惊醒梦中人
你的解释太有帮助了
谢谢!

【在 t****t 的大作中提到】
: 三个典型错误:
: 1. virtual函数,父子类之间的缺省参数值应该相同。换句话说,缺省参数值不是
: dynamic bind的。
: 2. 数组不能和继承一起用,即数组里元素类型必须完全相同,就算是父子类也不行。
: 3. 你指望op=能把A变成B?
: A* a1=new B; // a指向一个B
: A a2=*a1; // a2永远是个A,不会这样就变成B的

q*****g
发帖数: 72
8
补充一下下:
always use "delete" when you have used "new".
vector will destroy the object(s) it contains, but can not "free"
the momory that you allocated on heap.

【在 t****t 的大作中提到】
: 三个典型错误:
: 1. virtual函数,父子类之间的缺省参数值应该相同。换句话说,缺省参数值不是
: dynamic bind的。
: 2. 数组不能和继承一起用,即数组里元素类型必须完全相同,就算是父子类也不行。
: 3. 你指望op=能把A变成B?
: A* a1=new B; // a指向一个B
: A a2=*a1; // a2永远是个A,不会这样就变成B的

q***s
发帖数: 2243
9
thanks a lot for all your help
h***i
发帖数: 1970
10
数组元素可以用boost variant类型, 用boost::apply_visitor来调不同object的函数.

【在 t****t 的大作中提到】
: 三个典型错误:
: 1. virtual函数,父子类之间的缺省参数值应该相同。换句话说,缺省参数值不是
: dynamic bind的。
: 2. 数组不能和继承一起用,即数组里元素类型必须完全相同,就算是父子类也不行。
: 3. 你指望op=能把A变成B?
: A* a1=new B; // a指向一个B
: A a2=*a1; // a2永远是个A,不会这样就变成B的

h***i
发帖数: 1970
11
do not use new, delete style, always use boost::shared_pointer.

【在 q*****g 的大作中提到】
: 补充一下下:
: always use "delete" when you have used "new".
: vector will destroy the object(s) it contains, but can not "free"
: the momory that you allocated on heap.

1 (共1页)
进入Programming版参与讨论
相关主题
C 和 C++ 的区别问个弱问题
问个 c++ include 问题c++ std::abs(int) ambiguous?
弱问C++一个问题 一直不解多线程有什么优化的方法?
求助:怎么能support头文件#include namespace defined in another file
请教c++的string vector问题,谢谢! (转载)C++ head files help~
C++ 有现成的 hashtable 库吗?Question about
auto_ptr_array.h 疑问请教一个弱弱问题,关于#include的pathname
[合集] 问个面试题how to use hashtable in C++
相关话题的讨论汇总
话题: tellme话题: 子类话题: vector话题: include话题: int