Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何转换一个类方法来修改另一个类的私有元素?_C++_Encapsulation - Fatal编程技术网

C++ 如何转换一个类方法来修改另一个类的私有元素?

C++ 如何转换一个类方法来修改另一个类的私有元素?,c++,encapsulation,C++,Encapsulation,我有一个类B,它的指针属性是类a,它的方法将指针属性分配给另一个类a的变量。但是这个变量是私有的,分配变量会产生错误。我如何解决这个问题 #include<iostream> using namespace std; class A { private : int x; public: A(int); ~A(); }; class B { private : A * pA; int y; public: B(int, int);

我有一个类B,它的指针属性是类a,它的方法将指针属性分配给另一个类a的变量。但是这个变量是私有的,分配变量会产生错误。我如何解决这个问题

#include<iostream>

using namespace std;

class A {
private :
    int x;
public:
    A(int);
    ~A();
};

class B {
private :
    A * pA;
    int y;
public:
    B(int, int);
    ~B();
    void imprimer();
};

void B::imprimer() {
    cout << "B::imprimer: " << pA->x << " " << y << endl;
    }


main()
{
    B to(1, 2);
    to.imprimer(); //instruction (1)
}
#包括
使用名称空间std;
甲级{
私人:
int x;
公众:
A(int);
~A();
};
B类{
私人:
A*pA;
int-y;
公众:
B(int,int);
~B();
无效提示();
};
void B::impimer(){

cout您缺少的是类A的类get()set(int)方法 你没有宣布B班是a班的朋友

A的x是类A中的一个私有变量。只有类A可以修改它的变量,除非你做一些事情

你宣布B班是a班的朋友

class B; // you must 'declare Class B before Class A for this to work

class A {
friend class B;
private :
    int x;
public:
    A(int);
    ~A();
};
这将允许B类完全访问A类中的任何内容。但这是一个糟糕的设计


“C++ C++底漆”中有很多复杂的方法,S. Lippman允许“我怎样才能解决这个问题?”这不是一个需要解决的问题,而是应该发生的事情。一切都是按预期的进行的。你不应该去接触其他的私人成员,C++也不允许你这么做。这里没有任何问题。
class B; // you must 'declare Class B before Class A for this to work

class A {
friend class B;
private :
    int x;
public:
    A(int);
    ~A();
};
class A {
private :
    int x;
public:
    A(int);
    ~A();
    int getX( void) { return( x ) };
};

void B::imprimer() {
    cout << "B::imprimer: " << pA->getX() << " " << y << endl;
    }