Ваш синтаксис C ++ полностью отключен ... Не имеет абсолютно никакого смысла в программировании на C ++ или C.Это выглядит так, как будто вы пытаетесь вывести некоторые понятия из наследования типов javascript или чего-то такого же безобразного.
Это домашнее задание?Заводская функция, как вы ее определяете, не имеет смысла.Даже если вы создаете несколько экземпляров b, что вы делаете с этими экземплярами на фабрике?
Ваши объявления переменных совершенно неверны.Вы должны прочитать на учебнике по C ++, прежде чем пытаться программировать.
Хорошо, теперь перейдем по правильному пути:
Чтобы объявить класс, который будет иметь производные классы, создатель и деструктор должны иметь открытую или защищенную область видимости.Принимая во внимание, что по умолчанию (если вы не указываете область действия) он является закрытым для класса.
Кроме того, если ваш производный класс имеет деструктор, то базовый деструктор должен быть виртуальным.
Итак:
class Base {
public Base() { }
public virtual ~Base() { }
};
class Derived : public Base {
int a;
public Derived(int _a) : a(_a) { Base(); }
public virtual ~Derived() { }
};
Вы путаете синтаксис разыменования указателя с объявлением указателя на тип.Итак, объявление указателя на тип TYPE выглядит следующим образом:
TYPE * ptype;
, где ptype
- это переменная типа TYPE *
(указатель на TYPE)
например,
int *pnum;
pnum содержит адрес ячейки памяти, который указывает на целочисленный тип.
Вы можете использовать pnum для указания на целое число:
int x = 5;
pnum = &x; // read this line as 'pnum refers to x' or 'pnum points to x' or
// pnum is the memory address of x.
Если вы хотите получить доступ к целочисленному значению, на которое указывает pnum, вы можете «разыменовать» указатель памяти, который вы используете *pnum
cout << "Address of x in memory (stored in pnum) is: " << pnum << endl
<< "Value of x (pointed to by pnum is: " << *pnum << endl;
Итак, чтобы объявить указатель на базовый класс:
Base *b;
Чтобы создать экземпляр производного класса, используя указатель базового класса:
b = new Derived(10);
ВДля того, чтобы создать несколько таких экземпляров и сохранить их в массиве:
int count = 10;
Base **b = new Base[count];
for (i = 0; i < count; i++) {
b[i] = new Derived(i);
}
Если что-то из этого сбивает с толку ... и я имею в виду, что вы пытаетесь понять это более 30 секунд.Затем это означает, что вам нужно начать изучать C ++ с нуля.