在以下给出,访问乙我们可以用类B的成员函数和返回数据成员的私人数据成员,赋值给的数据成员的代码在构造函数(转换函数)内。但我无法这样做。请建议一些帮助。其他方式可以使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;
}
感谢有用的信息。问题仍然是: prog.cpp:在构造函数 'A :: A(常数B&)': prog.cpp:18:32:错误:INT B :: I_'是私人此上下文 A内(常量B&B1):I_(b1.i_){} //使用构造 ^〜 prog.cpp类型铸造:6:9:注:声明为专用这里 INT I_; ^〜我想知道如何在没有朋友声明的情况下访问B的i_。 – KnitahK
@KnitahK - 这不是论坛或调试服务。我用明显的代码指出了问题。如果您有*特定*问题,请发布[mcve]。 – StoryTeller
@KnitahK - 这个错误表明你没有使用'get()'。那么你的代码在这个问题上与错误有什么关系? – StoryTeller