2014-12-14 6 views
2

Я хочу сделать переменную что-то вроде enum witch является указателем на класс A, класс B или пустой.Создание переменной, которая может содержать разные классы

Это будет выглядеть примерно так:

#include "A.h" 
#include "B.h" 


enum Foo{ 
A, 
B, 
Empty 
}; 

int main(){ 
    Foo bar = new A(); 

    bar.print(); 

    bar = Empty; 
    if (bar == Empty) 
    // do stuff 
    return 0; 

} 

Есть ли что-то подобное возможно и как я могу это сделать?

ответ

2

Вы думаете об использовании полиморфизма?

Я думаю, что указатели здесь подходят лучше всего. Указатель на базовый класс может указывать на одного из его дочерних элементов или нуль/0, а также - в значительной степени то, что вы хотели.

Если ваш A и B могут наследовать от базового класса:

class A : public Base{...}; 
class B : public Base{...}; 

ваш код может выглядеть примерно так:

int main(){ 
    Base * bar = new A(); 

    bar->print(); 

    delete bar; //to release A 
    bar = 0; 

    if(bar == 0){ 
     // do stuff 
    } 
    return 0; 
} 

Кроме того, чтобы использовать bar->print() как это, убедитесь, что вы заявили это сначала в классе Base (поэтому компилятор знает, что любой тип, назначенный Base * bar, может использовать его, например:

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

Спасибо за идею, это подходит намного лучше. – Cirvis

+0

@ Cirvis np и удачи :) – PolGraphic

Смежные вопросы