我是一个PHP开发人员,试图编写一些C++。

我在将一个对象分配为另一个对象的属性时遇到麻烦。在PHP中,我会这样写:

class A {
    public $b;
}
class B {

}

$a = new A;
$a->b = new B;

如何在C++中做到这一点?到目前为止,我得到了:
class A {
    B b;
public:
    void setB(&B);
};
class B {

};

void A::setB(B &b)
{
    this->b = b;
};

A * a = new A();
B * b = new B();
a->setB(b);

我究竟做错了什么?

最佳答案

进行一些更改将使其编译:
1. B类必须在A之前声明,以便可以在A类中使用
2.声明setB(&B)需要对setB(B&)进行较小的更改

class B {
};

class A {
    B b;
public:
    void setB(B&);
};
void A::setB(B &b)
{
    this->b = b;
};

int main ()
{
A * a = new A();
B * b = new B();
a->setB(*b);
}

为了使效率更高,请考虑添加以下接受B作为参数并初始化成员变量'b'的构造函数。这将在'b'成员变量上使用副本构造函数,而不是使用默认构造函数,然后是赋值运算符。
A(B& b_) : b(b_)
{
}

10-04 13:29