Я знаю о Virtual Class, что они не могут быть инстанцированными, Теперь у меня есть вопрос о том случае, об этом, предположу, что у нас есть чисто абстрактный класс, как показано ниже:Как использовать абстрактный класс в другом классе (или любом классе)?
class Color{
public:
Color();
virtual string getName()=0;
~Color();
};
и 2 класса унаследованной формы она:
class Blue:public Color
{
public:
Blue();
~Blue();
string getName();
};
class Red:public Color{
public:
Red();
~Red();
string getName();
};
и третий класс хочет использовать Color
класс в качестве параметра конструктора и члена данных:
class Foo{
public:
Foo();
Foo(Color&);
~Foo();
void draw(Color&);
private:
Color* co;
};
и его реализация:
Foo::Foo():co(new Color()){
}
Foo::Foo(Color &c):co(new Color(c)){
}
Теперь, я знаю об этой части new Color()
и new Color(c)
является неправильным в этом случае, но я хочу использовать только тип Color
к пройденному в Foo
и непосредственно не используя Blue
или Red
как параметр.
Что такое решение? я должен использовать перегрузку или другую вещь? и для метода draw
у меня возникли проблемы? и я прочитал про Дизайн-шаблон, это помогает мне в этом случае?
tnx для вашего ответа.
Инициализировать 'co' как нулевой указатель в конструкторе по умолчанию? –
@Joachim Pileborg Нет, я не использовал. – mehdi