可能是重复问题:
C++中模拟接口的首选方法
我很好奇C++是否有接口,因为在Java中,实现设计模式通常是通过使用接口将类解耦。那么在C++中是否有一种类似的创建接口的方式呢?
可能是重复问题:
C++中模拟接口的首选方法
我很好奇C++是否有接口,因为在Java中,实现设计模式通常是通过使用接口将类解耦。那么在C++中是否有一种类似的创建接口的方式呢?
C++没有内置接口的概念。您可以使用仅包含纯虚拟函数的抽象类来实现它。由于它允许多重继承,因此您可以继承此类以创建另一个类,该类将包含此接口(我是说,对象接口 :))。
例如:
class Interface
{
public:
Interface(){}
virtual ~Interface(){}
virtual void method1() = 0; // "= 0" part makes this method pure virtual, and
// also makes this class abstract.
virtual void method2() = 0;
};
class Concrete : public Interface
{
private:
int myMember;
public:
Concrete(){}
~Concrete(){}
void method1();
void method2();
};
// Provide implementation for the first method
void Concrete::method1()
{
// Your implementation
}
// Provide implementation for the second method
void Concrete::method2()
{
// Your implementation
}
int main(void)
{
Interface *f = new Concrete();
f->method1();
f->method2();
delete f;
return 0;
}
override
关键字而不是 =0
会更加清晰吧? - Lars Nielseninterface
。 - Caleth"接口" 相当于 C++ 中的 "纯虚类"。理想情况下,这个 "接口" 类应该只包含纯虚的 public
方法和 static const
数据成员。例如:
struct MyInterface
{
static const int X = 10;
virtual void Foo() = 0;
virtual int Get() const = 0;
virtual inline ~MyInterface() = 0;
};
MyInterface::~MyInterface () {}
virtual
以保持类的纯abstract
性,并添加了inline
以便它可以在头文件中驻留而不会出现链接器错误。 - iammilindvirtual ~interfaceA() {}
。由于您的类已经是抽象的,因此将析构函数定义为纯虚函数并没有任何好处。 - CB BaileyC++ 中没有接口(Interface)的概念,但可以使用抽象类来模拟。
抽象类是至少有一个纯虚函数的类,不能创建抽象类的任何实例,但可以创建指向抽象类的指针和引用。继承自抽象类的每个类都必须实现纯虚函数,以便可以创建它的实例。
interface
。 - Alok Save
C ++
对模板有广泛的支持。只需编写接受模板的函数,并确保传递的类型具有所需的方法以避免编译错误,这样您就不必让用户继承任何东西来使用您的方法。 - ABu