从C ++转换器构造函数中的不相关类访问类的私有数据成员

时间:2017-09-13 06:23:09

标签: c++ casting

在下面给出的代码中,为了访问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;
}

2 个答案:

答案 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()) {}