oop — C ++: наследовать метод базового класса

У меня есть этот простой код:

class A {
public:
string toString() const { return "A"; }
};

class B : public A {
public:
string toString() const { // some code here }
};

я хочу toString() в классе B будет наследовать от класса A и принимать некоторые дополнительные значения. В этом примере будет: «AB» (A: из класса A и B: дополнительная строка).

Это легко в Java, но я не знаю, как это сделать в C ++. Моя первая идея — взять строку из toString() в классе А и добавить дополнительную строку. Итак, чтобы взять это: я использую: static_cast<A>(const_cast(this))->toString() но это не сработает 🙁

Пожалуйста, помогите мне. Спасибо 🙂

0

Решение

class A {
public:
string toString() const { return "A"; }
};

class B : public A {
public:
string toString() const { return A::toString() + "B"; }
};

В реализации MS (в Windows) вместо этого вы можете использовать __super :: toString (), но это непереносимое расширение MS.

4

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

string B::toString() const {
string result = A::toString();   // calls the member method in A
// on the current object
result += "B";
return result;
}

Квалификация вызова функции определяет, какая функция переопределения (если функция полиморфная) будет вызвана, поэтому она гарантирует, что динамическая диспетчеризация не будет отправлена ​​в B::toString() снова. Основное отличие от Java состоит в том, что, поскольку C ++ допускает множественное наследование, вы должны назвать основание A:: а не просто звонить super,

2

Прежде всего вы, вероятно, хотите, чтобы toString был виртуальным. Во-вторых, чтобы выполнить то, что вы хотите, вы можете сделать что-то вроде этого в B :: toString:

class B : public A
{
...
virtual string toString() const
{
string s = A::toString();
s += "B";
return s;
}
...
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector