从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

用户3930976

假设我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Objective-C在另一个XiB中使用自定义XiB

从另一个自定义重定向到自定义 html 页面

如何将自定义 ObservableCollection 元素复制到另一个自定义 ObservableCollection?

如何添加,并调用一个jBPM过程中的自定义Java类?

如何创建一个包含Java中泛型的自定义类的数组

XSD到Java POJO,它创建了一个自定义String类

将自定义注册块导入到Gutenberg中的另一个自定义块

使用AngularJS指令,如何将自定义模型从一个指令传递到另一个指令?

将自定义列表对象复制到另一个列表对象

将属性绑定到自定义控件的另一个属性

NativeScript 从自定义 Android 活动导航到另一个页面

创建另一个Java时将替换自定义对象的实例

C ++一个自定义的类String,将其分配给C风格的String

如何当点击到另一个活动发送自定义的ArrayList列表项的数据?

如何将捕获的图像从自定义相机传递到另一个活动?

B2C 自定义策略 - 添加按钮以重定向到另一个自定义策略

ByteBuddy:如何在另一个类中使用自定义方法声明一个类

Angular:如何将一个自定义指令的索引变量共享到另一个指令?

使用委托和协议将数据从一个自定义 TableView Cell 传递到另一个

使用不带泛型的自定义类而不是Java中的普通集合是一个好主意吗?

如何在我的Microsoft Teams自定义应用程序中重定向到另一个页面?

使用C#中的字典,将某些自定义类属性用作同一类中另一个属性(以值形式)的唯一键

Java8 Stream API:将列表分组到一个自定义类中

示例:自定义单元格的 Tableview 到另一个自定义单元格的 tableview

Java:如何在另一个类中使用在一个类中实例化的对象?

如何在Java中的另一个类中使用嵌套类?

加速的C ++ 14-5:自定义字符串类和引用计数器适用于一个构造函数,但不适用于另一个构造函数

将字符串值从自定义对话框传递到另一个活动

将Azure Web App自定义域克隆到另一个应用程序