два производных класса подкласса, но с двумя возвращаемым типом - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть суперкласс (A) и два подкласса (B, C)

абстрактная функция в A имеет два типа разности возврата в B и C!

Как я должен объявить эти ??

тип возврата важен

class A {                              //Super Class
public:
  A();
  virtual (some Type) QWERTY() = 0;
};

class B : public A {                   //Sub Class
public:
  B();
  double QWERTY();
};

class C : public A {                   //Sub Class
public:
  C();
  unsigned int QWERTY();
};

1 Ответ

0 голосов
/ 30 апреля 2020

я должен вызывать функцию подкласса с указателем суперкласса

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

Это как раз та ситуация, в которой dynamic_cast<> может помочь: она может условно преобразовать указатель из базового класса в подкласс, если и только если он окажется правильного типа :

void foo(A* a_ptr) {
  B* b_ptr = dynamic_cast<B*>(a_ptr);
  C* c_ptr = dynamic_cast<C*>(a_ptr);

  if(b_ptr) {
    b_ptr->QWERTY();
  }

  if(c_ptr) {
    c_ptr->QWERTY();
  }
}

It's, however, worth mentioning that this is some pretty ugly code, and might be suitable to solve the quiz you are presenting us, but in a normal environment, there are some design reevaluation that would happen before going to implement things this way.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...