Rai*_*dex 3 c++ object-slicing
假设我有一个A
具有 type 成员的类int
。我有一个类B
,它是A
.
B
旨在将成员初始化为某种状态,没有其他目的。
#include <string>
#include <iostream>
struct A {
int someInt;
A() : someInt(33){}
};
struct B : public A {
B() {
someInt = 4;
}
};
int main() {
A a = A();
A b = B();
std::cout<< a.someInt << std::endl;
std::cout << b.someInt << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
请注意我如何使用A b = B()
对象切片应该发生的地方。但是,由于B
没有向 中添加任何内容 A
,它是否是使用A
不同构造函数参数(或创建 的任何其他形式的实例A
)的有效替代方法?
编辑:背景是我有一个具有一些复杂设置的类。将初始化放在单独的子类中比编写构造函数、工厂或构建器要容易得多。
更常见且不易出错的方法是定义静态方法来创建类实例:
struct A {
static A makeA();
static A makeB();
};
int main()
{
auto a = A::makeA();
auto b = A::makeB();
}
Run Code Online (Sandbox Code Playgroud)
为了防止更多错误,您可能希望A
通过将A
ctor设为私有来禁止直接创建实例,而不是创建静态方法集。