ошибка C3662: спецификатор переопределения 'new' разрешен только для функций-членов управляемых классов - PullRequest
1 голос
/ 16 мая 2010

Хорошо, я пытаюсь переопределить функцию в родительском классе и получаю некоторые ошибки. вот контрольный пример

#include <iostream>
using namespace std; 

class A{
public:
    int aba;
    void printAba();
};

class B: public A{
    public:
    void printAba() new;
};

void A::printAba(){
    cout << "aba1" << endl;
}

void B::printAba() new{
    cout << "aba2" << endl;
}

int main(){
    A a = B();

    a.printAba();

    return 0;
}

И вот ошибки, которые я получаю:

Error   1   error C3662: 'B::printAba' : override specifier 'new' only allowed on member functions of managed classes   c:\users\test\test\test.cpp 12  test
Error   2   error C2723: 'B::printAba' : 'new' storage-class specifier illegal on function definition   c:\users\test\test\test.cpp 19  test

Как, черт возьми, я это делаю?

1 Ответ

1 голос
/ 16 мая 2010

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

class B: public A{
    public:
    void printAba();
};

Но метод базового класса должен быть виртуальным, чтобы метод мог быть выбран в зависимости от фактического идентификатора переменной.

class A{
public:
    int aba;
    virtual void printAba();
};

И если вы создадите B в стеке и скопируете в A, будет нарезка . Вы должны создать B в куче и привести указатель как A.

A* a = new B();
a->printAba();  // if printAba is not virtual, A::printAba will be called.
delete a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...