проблема с виртуальными функциями - PullRequest
0 голосов
/ 03 марта 2012

У меня есть 2 класса: один базовый и один производный. Также имеют структуру.

struct D;

class A {
  public:
    virtual D Multiply(D one, D two) {
        //realization 
        return result;
    }
    virtual D Pow(D one, D two) {
        result = this->Multiply(one,two); //#1
        return result;
    }
};

class B: public virtual A {
   public:
     virtual D Multiply (D one, D two){
           //realization 
     }
};

Функция Multiply имеет реализацию в class A. Итак, этот код хорош?

  B* b = new B();
  b->Pow(one,two);  // #2

и какая функция A::Multiply или B::Multiply будет вызываться при #2? Я думаю, что this в #1 будет указывать на A-часть B-объекта.

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Будет вызываться B :: Multiply, это основные принципы ОО.

1 голос
/ 03 марта 2012

это не обеспечивало реализацию B :: Multiply, поэтому вы получите ошибку компиляции (Unresolved External), если вы напишите свою реализацию в классе B, компилятор вызовет B :: Multiply

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...