如何合并两个A和B类以定义C 中抽象类的功能
How to Merge two classes A and B to define the functions of a abstract class in C++
在我的C 项目中,我有一个抽象类,该类定义了DLL的接口。称其为CabStractClass。
我有一个类斜方间,除了CabStractClass的1个功能外,所有功能都为所有功能定义了功能。我如何创建一个新的非抽象C类以继承CabStractClass?
这是我的尝试。它导致错误'e0322:不允许抽象类类型的对象" cclass"。
#include "stdafx.h"
class CAbstractClass
{
public:
CAbstractClass(void) {};
~CAbstractClass(void) {};
virtual int Fn1(int a) = 0;
virtual double Fn2(int a, int b) = 0;
virtual int Fn3(double a, double b) = 0;
};
class AClass
{
public:
AClass(void) {};
~AClass(void) {};
int Fn1(int a) { return 2 * a; }
double Fn2(int a, int b) { return (double)a / (double)b; }
};
class BClass
{
public:
BClass(void) {};
~BClass(void) {};
int Fn3(double a, double b) { return (int) (a+b); }
};
// My guess at how to combine all the classes.
class CClass : public CAbstractClass, public AClass, public BClass
{
public:
CClass(void) {};
~CClass(void) {};
};
int main()
{
CClass C; // E0322: object of abstract class type "CClass" is not allowed.
return 0;
}
AClass
和 BClass
也必须从 CAbstractClass
继承。FN1 FN2和FN3只是没有实现抽象类的虚拟方法,因此CClass
也是摘要
class AClass : public CAbstractClass {
//...
};
class BClass : public CAbstractClass {
//...
};
class CClass : public virtual AClass, public virtual BClass {
//...
};
我不确定它是否可以使用单个cabStractClass完成,但是如果将抽象接口分为两个单独的抽象接口,则很容易:
#include <stdio.h>
class CAbstractClassA
{
public:
virtual int Fn1(int a) = 0;
virtual double Fn2(int a, int b) = 0;
};
class CAbstractClassB
{
public:
virtual int Fn3(double a, double b) = 0;
};
class AClass : public CAbstractClassA
{
public:
int Fn1(int a) { return 2 * a; }
double Fn2(int a, int b) { return (double)a / (double)b; }
};
class BClass : public CAbstractClassB
{
public:
int Fn3(double a, double b) { return (int) (a+b); }
};
// My guess at how to combine all the classes.
class CClass : public AClass, public BClass
{
public:
};
int main()
{
CClass C;
printf("Fn1(5) returns %in", C.Fn1(5));
printf("Fn2(10,12) returns %fn", C.Fn2(10,12));
printf("Fn3(3.14,6.28) returns %in", C.Fn3(3.14,6.28));
return 0;
}
这是我最终使用的。我之所以选择它,是因为它独自留下了宏class。还有更多的工作:BCLASS中必须定义来自Aclass的每个成员功能。另一个好处是不需要CCLASS。
#include "stdafx.h"
class BAbstractClass
{
public:
BAbstractClass(void) {};
~BAbstractClass(void) {};
virtual int Fn1(int a) = 0;
virtual double Fn2(int a, int b) = 0;
virtual int Fn3(double a, double b) = 0;
};
class AClass
{
public:
AClass(void) {};
~AClass(void) {};
int Fn1(int a) { return 2 * a; }
double Fn2(int a, int b) { return (double)a / (double)b; }
};
class BClass : public AClass, public BAbstractClass
{
public:
BClass(void) {};
~BClass(void) {};
int Fn3(double a, double b) { return (int)(a + b); }
// Define a function for each of AClass' member functions.
int Fn1(int a) { return AClass::Fn1(a); }
double Fn2(int a, int b) { return AClass::Fn2(a, b); }
};
int main()
{
BClass B;
return 0;
}
相关文章:
- 无法创建抽象类的实例
- 用pybind11包装C++抽象类时出错
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 抽象类错误,请参阅声明" "是抽象的
- 将自定义函数传递到基抽象类中以延迟执行
- 对纯抽象类中方法的未定义引用
- 在使用具有相等运算符定义的抽象类时,如何定义父类以减少代码重复?
- 如何合并两个A和B类以定义C 中抽象类的功能
- C++ 重新定义抽象基类
- 尝试定义派生自抽象类的类类型的对象时出错
- 抽象类无定义的类别
- 从另一个抽象类得出一个抽象类时,C 中的类重新定义错误
- 当后代需要不同的参数列表时,我应该如何在基类中定义抽象方法
- 在从抽象类继承的模板类中正确使用未定义的类型
- C++未定义的抽象类构造函数
- 在另一个类中使用一个类的变量(都是从抽象类定义的)
- 定义抽象基类的默认构造函数
- 定义共享库中抽象类的接口
- 抽象类的用户定义构造函数