【发布时间】:2017-09-11 17:09:28
【问题描述】:
我最近开始接触 C++,我的主要语言一直是 Java。
我希望能够在构造函数中传递对对象的引用,以便构造的对象可以使用传递的对象并对其进行更改。
在对该主题进行一些研究时,我遇到了复制构造函数,但我不太了解此操作是否严格需要它们以及它们首先真正完成了什么。
TLDR:我想学习如何在 C++ 中完成以下 Java 代码的等效操作。
Java 代码
class Master {
private Slave slave;
Master(Slave slave) {
this.slave = slave;
}
public void doSomethingToSlave() {
slave.doSomething();
}
public void changeSlave(Slave s) {
this.slave = s;
}
}
C++ 代码 ??? -我目前的尝试-
class Master {
public:
Master(Slave& slave);
void doSomethingToSlave();
void changeSlave(Slave& s);
private:
Slave& slave; // Is this correct? Do I need to specify that it's a reference?
}
Master::Master(Slave& slave) { // Copy constructor needed?
this->slave = slave;
}
Master::doSomethingToSlave() {
slave.doSomething();
}
Master::changeSlave(Slave& s) {
slave = s;
}
使用指针?
class Master {
public:
Master(Slave* slave);
void doSomethingToSlave();
void changeSlave(Slave* s);
private:
Slave* slave;
}
Master::Master(Slave* slave) {
this->slave = slave;
}
Master::doSomethingToSlave() {
slave.doSomething(); // How do I access the object at slave*?
}
Master::changeSlave(Slave* s) {
slave = s;
}
【问题讨论】:
-
你不会通过尝试从 Java 代码转置来学习 C++——这两种语言几乎完全不同。你需要一本好的 C++ 教科书。
-
@NeilButterworth 我开始意识到这一点,但现在我只是在空闲时间从事一些小型 C++ 项目,以便在我深入研究文献之前更好地了解这门语言,这就是我使用 Java 所做的,它使学习 Java 的过程变得非常愉快。
-
@Daniel 这根本与复制构造函数无关。复制构造函数用于复制相同的 class 对象,例如
Master(const Master& m) {...} -
您应该在此处使用指针。一旦一个引用被初始化,它将总是引用同一个对象。
-
@mcrlc 我添加了第三个使用指针的示例,问题是我真的不确定如何在 doSomethingToSlave() 方法中的指针 *slave 处访问对象.
标签: c++ constructor pass-by-reference