具有两个构造函数的抽象类
Abstract class with two constructors c++
假设我有以下两个构造函数的抽象类:
#ifndef ABSTRACTCLASS_H
#define ABSTRACTCLASS_H
#include <iostream>
using namespace std;
class AbstractClass
{
public:
AbstractClass(int);
AbstractClass();
virtual ~AbstractContext();
//Pure virtual function
virtual void doSomething() = 0;
private:
int x;
};
#endif
我有两个类,将继承从AbstractClass
。
- A类将使用
AbstractClass(int);
- B类将使用
AbstractClass();
#ifndef A_H
#define A_H
class A: public AbstractClass
{
public:
A(int = 0);
virtual ~A();
virtual void doSomething();
private:
int xCoord;
}
#endif
A.cpp
#include "A.H"
A::A(int x):AbstractClass(x),xCoord(x) {}
void A::doSomething()
{
cout << xCoord * xCoord << endl;
}
#ifndef B_H
#define B_H
class B: public AbstractClass
{
public:
B();
virtual ~B();
virtual void doSomething();
}
#endif
B.cpp
#include "B.H"
B::B():AbstractClass() {}
void B::doSomething()
{
cout << "nothing" << endl;
}
<标题>
- 我使用2个构造函数在一个抽象类的好做法?
- 继承正确吗?特别是我使用了两个版本的构造函数?
拥有一个以上public
构造函数的ABC是完全合适的,如果这两个构造函数都可以应用于从ABC派生(或将来有一天)的每个类型。
也就是说,public
基类构造函数仍然是该类接口的一部分。如果这些构造函数中的一个或多个不适用于每个具体实例化,那么理想情况下它们不应该是public
接口的一部分。将这些特殊的构造函数设置为private
是一种改进,因为它使未来的程序员更难以错误地实现新的具体派生类型。
这是其他创造模式发挥作用的时候。一种常见而简单的方法是在ABC上提供static
成员函数来创建具体类型。这是一个工厂方法模式的例子。
class A;
class B;
class AbstractClass
{
public:
static std::unique_ptr <AbstractClass> MakeA (int x)
{
return std::make_unique <A> (x); // You need to provide this, easily found
}
static std::unique_ptr <AbstractClass> MakeB ()
{
return std::m,ake_unique <B> ();
}
virtual ~AbstractClass();
private:
AbstractClass ();
AbstractClass (int x);
};
还有许多其他的创作模式;这是我最直观的感觉。
这没什么问题。
基类有两种初始化自身的方法,派生类使用最适合其实现的方法。同样地,它们可以选择提供两个自己的构造函数,映射到基类中的构造函数。
关键是两个构造函数都应该使类处于可感知的状态。因此,例如,您在基类中的默认构造函数可能应该将xCoord
设置为一些合理的值(可能为0),而我猜测AbstractClass(int)
将xCoord
设置为传递给构造函数的值。
相关文章:
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 当我链接两个静态C++库时,我可以在两个主函数库中有两个主要功能吗?
- 静态类属性,C++中的多个构造函数
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- pair的两个构造函数几乎相同,为什么不生成构建错误?
- 为什么<T> LLVM 中的预期为 Expect&&... 实现两个构造函数<T>?
- 为什么我的类只适用于两个构造函数 C++
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 类介绍 (c++) 项目希望我们创建两个构造函数,但它们都不需要任何参数 - 我应该在这里做什么?
- 除了两个构造函数外,C++库导入也可以工作
- 在两个构造函数之前将我的静态数据成员在 CPP 文件中初始化为 0
- 如何有条件地在具有相同签名的两个构造函数之间切换
- RAII 在两个构造函数之间进行选择的方式
- 具有两个构造函数的抽象类
- 这两个构造函数调用之间的区别
- 为什么在我的程序中调用两个构造函数
- 组合复制和移动的两个构造函数
- 为什么这两个构造函数一起不会产生歧义错误?
- 在两个构造函数之间进行选择