我们可以在另一个类的构造函数的帮助下初始化一个对象吗?
class1 object = new class2();
答案 0 :(得分:3)
只要class2
扩展(或在接口的情况下实现)class1
就可以了。例如,List<String> list = new ArrayList<>();
要明确的是,您正在创建class2
(或我的示例中为ArrayList
)的实例。您恰好已将变量声明为class1
(或List
)类型。
答案 1 :(得分:2)
在C ++中使用它的唯一方法
class1 object1 = new class2();
将在class2*
和class1
之间进行隐式转换。这可以通过转换构造函数来实现:
struct class1
{
class1(const class2*);
};
这是否构成使用类的构造函数来帮助&#34;构建一个不同的对象取决于你的意思,通过帮助构建。
如果你的意思是
class1 object1 = class2();
然后转换构造函数需要按值或引用取class2
。例如,
struct class1
{
class1(const class2&);
};
类型之间不需要 is-a 关系。
答案 2 :(得分:1)
只说C ++:这是可能的,但是类需要多态“是一种”关系(C ++中的公共继承)。例如:
class class1 { };
class class2 : public class1
{
class2(int) {}
};
class1* object1 = new class2(42); // A pointer is needed (in C++)
delete object1;
// better would be:
std::unique_ptr<class1> object1(new class2(42));
编辑: 与此同时,线程开启者删除了C ++ - Tag,所以我的答案不再具有任何相关性。
答案 3 :(得分:1)
只有当class2是class1的子类时才有可能。 这称为多态。
class Class1{
/*
*
*
body of class1
*
*/
}
class Class2 extends Class1{
/*
*
*
body of class2
*
*/
}
然后你可以声明
Class1 object1 = new Class2();
希望这有帮助..
答案 4 :(得分:0)
class class1{}
class class2 extends class1{}
如果您在类层次结构中有父子关系,那么它根本不是问题。
然后
class1 object1 = new class2();
有效
实际上里面发生的是你有一个class2对象,但是由class1变量引用。
但如果你喜欢
class class1{}
class class2{}
然后这不起作用