Member 13395361 Ответов: 2

Как мне решить эту проблему, я не могу получить правильный ответ..?


#include <iostream>
using namespace std;
class A { int n;
    protected:
        A(int i) : n(i) { }
        virtual int get() = 0;
        virtual void print() = 0;
};
int A::get() {
return n;
}
class B : private A {
    protected:
       _ _ _ _1st _ _ _ _ // Define the constructor to initialize A::n
     _ _ _ _ _2nd _ _ _// Override get() function to return A::n
};
class C : public B {
    public:
        C(int i) : B(i) {}
        void print() {
            cout << get() << endl;
        }
};
int main(){
    int n;
    cin >> n;
    C *p = new C(n);
    p->print();
    return 0;
}


Что я уже пробовал:

В 1-м бланке я сталкиваюсь с проблемой, как определить конструктор для инициализации...

В то время как во 2-м бланке он просит переопределить get func,на мой взгляд, независимо от get func в базовом классе,просто это будет скопировано так же, как и в базовом классе

2 Ответов

Рейтинг:
2

Jochen Arndt

Вы определяете конструктор так же, как это делается в классе C.

Вы должны реализовать эту функцию, потому что она объявлена чисто виртуальный в базовом классе (который затем называется абстрактный класс). Смотреть также абстрактный класс - cppreference.com[^].


Рейтинг:
1

CPallini

Цитата:
В 1-м бланке я сталкиваюсь с проблемой, как определить конструктор для инициализации...
Единственная разумная вещь, которую можно сделать, - это вызвать конструктор базового класса, не так ли?

Цитата:
В то время как во 2-м бланке он просит переопределить get func,на мой взгляд, независимо от get func в базовом классе,просто это будет скопировано так же, как и в базовом классе
A::get не доступен из C, если не B переопределяет его (A::get доступен из B).