Я хочу знать, является ли один из следующих двух вариантов дизайна дизайна превосходным с точки зрения производительности и/или ремонтопригодности или других проблем, которые будут способствовать одному подходу к другому.C++ Class Inheritance Design Choice
Первый подход:
Базовый класс (родитель) имеет частный элемент данных и одну чистую виртуальную функцию пустот. Детский класс (childA) передает параметр из его конструктора по умолчанию родительскому и использует метод getter для родителя, чтобы распечатать другое значение.
Второй подход:
Базовый класс (Oncle) состоит только из деструктора в Virual и чистого виртуального метода. В дочернем классе (племяннике) хранится значение как частный элемент данных и имеет собственную функцию getter для выполнения некоторых вычислений.
Вот код:
#include <iostream>
class parent{
public:
parent(int x){ _x = x; }
virtual ~parent(){}
virtual void calc(void) = 0;
int getX(void) { return _x; }
private:
int _x;
};
class childA: public parent{
public:
childA(int x): parent(x){}
void calc(void){std::cout << "x sq: " << parent::getX()*parent::getX() << std::endl;}
};
class oncle{
public:
virtual ~oncle(){}
virtual void calc(void) = 0;
};
class nephewA: public oncle{
public:
nephewA(int x): _x(x){}
void calc(void){std::cout << "x sq: " << getX()*getX() << std::endl;}
int getX(void){ return _x; }
private:
int _x;
};
int main(int argc, char *argv[])
{
parent *first = new childA(3);
parent *second = new childB(3);
first->calc();
second->calc();
oncle *foo = new nephewA(3);
oncle *bar = new nephewB(3);
foo->calc();
bar->calc();
delete bar;
delete foo;
delete second;
delete first;
return 0;
}
Короче говоря: первый подход делает акцент на родителей, а второй на дочернем классе.
Так есть ли какие-либо количественные аспекты, которые могли бы помочь мне выбрать один из двух подходов?
Приложение должно определить, какой подход необходим. – NathanOliver
Возможный переход на [email protected] –
Вопрос, который будет просто дискуссией. На самом деле не должно быть в этом разделе. – Khaldor