假设我在Java中有两个自定义类,即A类和B类:
class A {
int x;
int y;
public A(int x, int y)
{
this.x = x;
this.y = y;
}
}
class B {
A a;
int z;
public B(A a, int z)
{
this.a = a;
this.z = z;
}
}
我想将这种情况转换为C ++。
A类或多或少会按原样翻译,但是当我去B类并编写这样的代码时:
class B {
A a;
int z;
public:
B(A a1, int z1){
a = a1;
z =z1;
}
};
它抱怨说类A没有默认的构造函数,所以当我A a;
在类B的顶部声明时,它无法实例化我的“ a”变量(据我所知,Java并不在声明时实例化,而C ++则在实例化时实例化)。
那么,处理这种情况的普通C ++方法是什么:我应该向类A添加不带参数的默认构造函数,还是这不是正确的方法?
非常感谢。
从Java到C ++的转换对上下文非常敏感。它们实际上是非常不同的语言,并且在很大程度上取决于您要实现的目标。
在Java中,所有用户定义的类型都可以通过引用进行访问。C ++中的功能等效项是一个指针。但是,在C ++中,您可以像内置类型一样直接访问对象。所以你可以这样写:
class A {
int x;
int y;
public:
// note: we don't initialize members in the body
A(int x, int y): x(x), y(y) {}
};
class B {
A a;
int z;
public:
B(A a, int z): a(a), z(z) {}
};
C ++为您提供了更多选项来引用用户定义的类型,因此它实际上取决于您需要解决的更大问题。
其他可能性:
std::shared_ptr<A> a; // much more Java-like (slower)
std::unique_ptr<A> a; // when you need one copy only (more common)
A* a; // when you need to live dangerously
A a; // use it more like a built-in
参考:
std::unique_ptr
当您只需要管理一个
std::shared_ptr
当需要从多个位置管理对象时
注意:使用方式Java
和使用C++
方式之间的差异太大,以至于我建议Java
您在处理时不要再在意了C++
。C++
作为一种新语言独立学习,而无需不断引用做事的“ Java方式”。
推荐书籍:权威的C ++书籍指南和清单
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句