在 C++ 中构建接口
Building interface in c++
请考虑以下代码:
class IMyInterface
{
private:
IMyInterface();
~IMyInterface();
public:
virtual void func1();
virtual void func2(const SerialPortParameters);
virtual int func3(unsigned char *, int bufferSize, int);
};
在 C++ 中声明接口可以吗?我将构造函数放在私有部分,因此没有人可以从中创建对象,并且所有方法都是虚拟的。它是在 C++ 中构建接口的标准方法吗?
而且它只有一个头文件。因为它是一个接口,所以没有实现,所以我认为没有必要创建一个 cpp 文件。我说得对吗?
感谢您的帮助。
您根本不需要构造函数,因为接口不会被实例化。您还应该按照以下方式制作这些方法(析构函数除外)pure virtual
。创建这些函数 pure vitual
,您正在创建一个无法实例化的 abstract class
。
public:
virtual ~IMyInterface(){}
virtual void func1()=0;
virtual void func2(const SerialPortParameters)=0;
virtual int func3(unsigned char *, int bufferSize, int)=0;
Is that Ok for declaring an interface in c++? ... Is it a standard way of building interfaces in c++?
不,不是。你应该解决几个问题
class IMyInterface
{
public:
virtual ~IMyInterface() {}
virtual void func1() = 0;
virtual void func2(const SerialPortParameters) = 0;
virtual int func3(unsigned char *, int bufferSize, int) = 0;
};
- 你根本不需要构造函数
- 创建一个空的 public 虚拟析构函数(私有 constructor/destructor 是个坏主意,因为它会阻止继承)
- 使接口函数纯虚
这行不通,原因有二:
- 将构造函数设为私有可确保没有人能够实例化您的接口。甚至派生的 class.
也不行
- 您没有创建析构函数
virtual
- 接口必须的。
与其将构造函数设为私有,不如标记除析构函数之外的所有函数 pure virtual。
此外,请确保您的 class 使用 public virtual
从您的 "interface" 继承。否则,层次结构深处的某些 classes 可能最终会通过多个路径继承相同的成员。
请考虑以下代码:
class IMyInterface
{
private:
IMyInterface();
~IMyInterface();
public:
virtual void func1();
virtual void func2(const SerialPortParameters);
virtual int func3(unsigned char *, int bufferSize, int);
};
在 C++ 中声明接口可以吗?我将构造函数放在私有部分,因此没有人可以从中创建对象,并且所有方法都是虚拟的。它是在 C++ 中构建接口的标准方法吗?
而且它只有一个头文件。因为它是一个接口,所以没有实现,所以我认为没有必要创建一个 cpp 文件。我说得对吗?
感谢您的帮助。
您根本不需要构造函数,因为接口不会被实例化。您还应该按照以下方式制作这些方法(析构函数除外)pure virtual
。创建这些函数 pure vitual
,您正在创建一个无法实例化的 abstract class
。
public:
virtual ~IMyInterface(){}
virtual void func1()=0;
virtual void func2(const SerialPortParameters)=0;
virtual int func3(unsigned char *, int bufferSize, int)=0;
Is that Ok for declaring an interface in c++? ... Is it a standard way of building interfaces in c++?
不,不是。你应该解决几个问题
class IMyInterface
{
public:
virtual ~IMyInterface() {}
virtual void func1() = 0;
virtual void func2(const SerialPortParameters) = 0;
virtual int func3(unsigned char *, int bufferSize, int) = 0;
};
- 你根本不需要构造函数
- 创建一个空的 public 虚拟析构函数(私有 constructor/destructor 是个坏主意,因为它会阻止继承)
- 使接口函数纯虚
这行不通,原因有二:
- 将构造函数设为私有可确保没有人能够实例化您的接口。甚至派生的 class. 也不行
- 您没有创建析构函数
virtual
- 接口必须的。
与其将构造函数设为私有,不如标记除析构函数之外的所有函数 pure virtual。
此外,请确保您的 class 使用 public virtual
从您的 "interface" 继承。否则,层次结构深处的某些 classes 可能最终会通过多个路径继承相同的成员。