仅更改成员的子类是否有效?

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)的有效替代方法?

编辑:背景是我有一个具有一些复杂设置的类。将初始化放在单独的子类中比编写构造函数、工厂或构建器要容易得多。

Sla*_*ica 5

更常见且不易出错的方法是定义静态方法来创建类实例:

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通过将Actor设为私有来禁止直接创建实例,而不是创建静态方法集。