функция — Какой тип членов я могу добавить в абстрактный класс C ++

Здравствуйте, допустим, у меня есть абстрактный класс, который имеет несколько чистых абстрактных функций, и у меня есть несколько классов, производных от этого класса, и все данные из этих классов в конечном итоге становятся похожими, мне было интересно, было бы разумно или вообще возможно объявить вектор защищен в абстрактном классе для сбора данных, что-то вроде.

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 ++?

0

Решение

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 в конце ее объявления. Вам не нужно указывать определение чисто виртуальной функции.

Вы не можете объявить экземпляр абстрактного базового класса; Вы можете использовать его только как базовый класс при объявлении других классов.

1

Другие решения

Чистые виртуальные функции-члены объявлены как

virtual <return-type> func(<parameters>) = 0;

Это просто виртуальные функции, и они работают как любая другая виртуальная функция. Обычно они не имеют или не нуждаются в реализации, но вы можете предоставить ее, если хотите.

Вы можете добавить любого члена, которого хотите, в абстрактный класс в C ++. Абстрактный класс — это обычный класс с одной или несколькими чисто виртуальными функциями-членами.

1

  1. Я не вижу никаких абстрактных классов здесь
  2. Вы можете включать члены любого типа в абстрактный класс
0

Более важно чем то, почему.

Абстрактный класс — это не просто «класс, в котором все функции сделаны чисто виртуальными». Он представляет определенную идеологию в объектно-ориентированном программировании. При использовании в качестве интерфейсов они не должны содержать состояния.

0
По вопросам рекламы [email protected]