#ifndef TEST_H
#define TEST_H
#include <iostream>
#include <string>
class A{
public:
virtual void test1() = 0;
virtual std::string test2() = 0;
};
class B : public A{
public:
void test1(){
std::cout << A::test2() << " World";
}
};
class C : public B{
public:
std::string test2(){
return "hello";
}
};
class C1 : public B{
public:
std::string test2(){
return "Sup";
}
};
#endif // TEST_H
У меня есть интерфейс A с чистыми виртуальными методами. У меня есть абстрактный класс, который хочет реализовать test1
и использовать test2
для реализации test1
.Использовать чистые виртуальные методы в абстрактном классе
Теперь C и C1 и мои конкретные классы, которые реализуют test2
Но я не могу сделать std::cout << A::test2() << " World";
в классе B
error: cannot call member function 'virtual std::string A::test2()' without object
Как бы сделать что-то подобное в C++?
'A' и' B' вообще не связаны.Поэтому вы не можете этого сделать. Чтобы иметь возможность сделать это, «B» нужно наследовать от «A», я не уверен, насколько это соответствует вашему дизайну. –
Для класса, реализующего интерфейс 'A', он должен фактически _inherit_ от' A'. –
Да, это была опечатка, я сожалею. –