在下面给出的代码中,为了访问B的私有数据成员我们可以使用B类的成员函数并返回数据成员,将其分配给构造函数中的A的数据成员(转换器函数)。但我无法这样做。请提出一些帮助。其他方式可以是B的A级朋友,但是需要通过构造函数访问。
#include <iostream>
using namespace std;
class B
{
int i_;
public:
B(int i = 3) : i_(i) {}
int give() { return i_; }
};
class A
{
int i_;
public:
A(int i = 0) : i_(i) { cout << "A::A(i)\n"; }
A(const B &b1) : i_(b1.i_) {} // Type casting using constructor
int display() { cout << i_; }
};
int main()
{
A a;
B b; // object is constructed
a = static_cast<A>(b); // B::operator A(), converting data member of class B to class A
a.display();
return 0;
}
答案 0 :(得分:1)
你的问题是正确的。 int give()
是一个非const成员函数,只能在非const对象上调用。但是const B &b1
是对const对象的引用。
由于在返回整数值时没有修改B
对象,所以通过const限定成员函数使代码const正确:
int give() const { return i_; }
现在A
c&#t;不会尝试非法操作。
答案 1 :(得分:1)
根据@ThisTeller的建议,还不足以改变A的构造函数以使用正确的“getter&#39;方法,以便您停止访问私人成员:
A(const B &b1) : i_(b1.give()) {}