对象数组和继承

时间:2013-12-20 14:35:17

标签: c++ arrays class object inheritance

我有A类作为基类, 来自A的B类和C类派生类 并且D类具有类型A(组合)

的数据成员(指向Array的指针)
enter code here

class D{
A **a;
int size;
.......
a = new A*[size]; 
......
 };

我有Print方法,在它的主体中我必须具有给定ID的特定元素(如果它来自B类或C类)(B和C都有数据成员ID)在print函数中应该有2个选项。 。打印B类元素,或C类打印元素? 我该如何具体说明这些要素?

我做了A级摘要!!

enter code here
class A{
.......
virtual void print ()=0;
};

class B :public A{
........
........
void print(){
.......}
};

C类:公开A {     ........     ........     void print(){     .......}     };

class D{
........
.......
void Print ()
int P;
cout<<" if you want to print class B elements enter 1 , or 2 for class C"<<endl;
cin>>P;
if(P==1){
dynamic_cast<B*>(*a)->print(); }
else
if (P== 2){
 dynamic_cast<C*>(*a)->print(); }

我的问题是如何从B类或C类

中具体说明这些元素

1 个答案:

答案 0 :(得分:2)

我在这里假设了几件事,特别是a成员实际上包含指向A的子类的指针 - 即B s和{{1} }第

我也假设你在C方法中迭代这个数组,你不知道哪个是哪个。

如果你不关心哪个是哪个而只是想打印对象的属性而不管它们是什么类型,那么你可以在print中提供一个纯virtual方法,它返回一个{您希望A {1}}(或其他),并在迭代中调用该方法:

std::string

如果想要打印print()class A { public: virtual std::string printMe() const = 0; }; class B : public A { public: std::string printMe() const { return "I'm a B"; } }; class C : public A { public: std::string printMe() const { return "I'm a C"; } }; 类型的对象,那么您需要能够确定哪个使用{{1} }。由于B以这种方式only works使用多态类型,因此您需要确保C至少有一个dynamic_cast函数。但是这没关系因为,因为dynamic_cast正在抽象层次结构中使用,所以你真的应该有一个A析构函数,这就足够了。

virtual

现在您可以使用A

virtual