У меня есть родительский класс Person
, затем он наследуется Employee
и Customer
, и они наследуются далее. Также у меня есть массив Person
указателей, где я храню классы "третьего уровня". Я бы хотел, чтобы salary()
был доступен только для Employee
с, а charge()
только для Customer
с. Пытался использовать чистые функции в Person
, но тогда Employee
и Customer
все еще требуют, чтобы оба были определены для конструирования.
Может быть, я мог бы определить другим способом или каким-то образом заблокировать / удалить нежелательные функции у детей?
class Person {
public:
int money;
Person() { money = 1000; }
virtual ~Person() {}
void salary(int m) { if (m >= 0) money += m; }
void charge(int m) { if (m >= 0) money -= m; }
};
class Employee : public Person {};
class Customer : public Person {};
class Programmer : public Employee {};
class Secretary : public Employee {};
class Janitor : public Employee {};
class Business : public Customer {};
class Private : public Customer {};
class Charity : public Customer {};
Редактировать:
Person* people[10];
Person[0] = new Programmer();
...
Затем я хочу вызвать метод, используя эти указатели, например, (*person[0]).salary(100)
для производных от Employee или (*person[5]).charge(500)
для клиентов. Я использую приведение, чтобы узнать, если объект от E или C.