Здравствуйте, допустим, у меня есть абстрактный класс, который имеет несколько чистых абстрактных функций, и у меня есть несколько классов, производных от этого класса, и все данные из этих классов в конечном итоге становятся похожими, мне было интересно, было бы разумно или вообще возможно объявить вектор защищен в абстрактном классе для сбора данных, что-то вроде.
class A
{
protected:
vector <string> str;
public:
virtual function x();
virtual function y(); //etc etc
virtual ~A(){;}
};
class B : public A
{
public:
function x();
function y();
};
class C: public A
{
//similar to class B
} ;
Мне трудно понять, как чистые виртуальные функции работают с C ++, я понимаю полиморфизм, так как я сделал много проектов с ним в Java. Можно ли было даже объявить и использовать этот вектор, поскольку не может быть создан экземпляр абстрактного класса в c ++?
I was wondering if it would be wise or even possible to declare a vector under protected in the abstract class to collect the data.
Да, поднятие членов данных, совместно используемых несколькими производными типами, является законным выбором дизайна.
What type of members can I add in a c++ abstract class?
Вы можете добавить любой тип членов в абстрактный класс. В общем случае члены данных класса должны быть инициализированы и назначены только внутри конструктора и других функций-членов этого класса. В противном случае нарушается инкапсуляция, что усложняет обслуживание и модификацию класса.
I am having difficulty understanding how pure virtual functions work with c++
Укажите виртуальную функцию как чистую, поместив = 0 в конце ее объявления. Вам не нужно указывать определение чисто виртуальной функции.
Вы не можете объявить экземпляр абстрактного базового класса; Вы можете использовать его только как базовый класс при объявлении других классов.
Чистые виртуальные функции-члены объявлены как
virtual <return-type> func(<parameters>) = 0;
Это просто виртуальные функции, и они работают как любая другая виртуальная функция. Обычно они не имеют или не нуждаются в реализации, но вы можете предоставить ее, если хотите.
Вы можете добавить любого члена, которого хотите, в абстрактный класс в C ++. Абстрактный класс — это обычный класс с одной или несколькими чисто виртуальными функциями-членами.
Более важно чем то, почему.
Абстрактный класс — это не просто «класс, в котором все функции сделаны чисто виртуальными». Он представляет определенную идеологию в объектно-ориентированном программировании. При использовании в качестве интерфейсов они не должны содержать состояния.