Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++的新手,我需要从一个类中的私有类成员中读取一个不同的类中的方法,例如: class a{ private: int x; } class b{ void foo(); } void b::foo(){ //here I want to read from x that's in a }_C++_Class_C++11_Private - Fatal编程技术网

读取私有变量类成员 我是C++的新手,我需要从一个类中的私有类成员中读取一个不同的类中的方法,例如: class a{ private: int x; } class b{ void foo(); } void b::foo(){ //here I want to read from x that's in a }

读取私有变量类成员 我是C++的新手,我需要从一个类中的私有类成员中读取一个不同的类中的方法,例如: class a{ private: int x; } class b{ void foo(); } void b::foo(){ //here I want to read from x that's in a },c++,class,c++11,private,C++,Class,C++11,Private,我是否必须在类a中设置一个函数,比如int readx(){return x);)或a readclass(){return*this);}?还有其他方法吗?您可以使用友元类或函数,但使用方法的私有成员是个坏主意(测试是唯一合理的借口)。如果无法避免使用私有成员,最好使用公共方法,或者重新设计代码。您可以实现一个可以访问foo中x的friend函数 如果类a中没有此数据成员的访问器,则应将类b的成员函数声明为类a的友元函数 比如说 #include <iostream> class

我是否必须在
类a
中设置一个函数,比如
int readx(){return x);)
a readclass(){return*this);}
?还有其他方法吗?

您可以使用友元类或函数,但使用方法的私有成员是个坏主意(测试是唯一合理的借口)。如果无法避免使用私有成员,最好使用公共方法,或者重新设计代码。

您可以实现一个可以访问foo中x的friend函数


如果类a中没有此数据成员的访问器,则应将类b的成员函数声明为类a的友元函数

比如说

#include <iostream>

class B
{
public:    
    void foo() const;
};

class A
{
public:
    A( int x ) : x( x ){}
private:    
    friend void B::foo() const;
    int x;
};

void B::foo() const
{
    A a { 10 };
    std::cout << a.x << std::endl;
}

int main()
{
    B().foo();

    return 0;
}
#包括
B类
{
公众:
void foo()常量;
};
甲级
{
公众:
A(intx):x(x){}
私人:
friend void B::foo()常量;
int x;
};
void B::foo()常量
{
A A{10};

std::cout类的私有部分的目标是“隐藏”处理数据的方式,提供一种使用公共方法访问所述数据的简化方式。 使用公共方法更改私有成员的值的优点是,例如,您可以只允许“x”的值介于0和10之间

在您的情况下,您应该考虑“x”在第一个类中代表什么,以及第二个类直接访问它是否有意义,而不需要任何控制或特殊考虑。如果是这种情况,它可能是一个公共值。在另一种情况下,您需要创建一个公共方法来读取它,如readx examp乐。 如果只有“b”具有直接访问“x”的权限,那么您还可以定义一个friend函数,就像有人说过的那样


请注意,返回指向实例的指针将不允许访问该类的私有成员。

声明
友元
函数或类将授予该函数或类对a的x的读写访问权限,a

class a {
public:
   const int& readx() const { return x; }
private:
   int x 
};
或者,如果你更喜欢这个语义

class a {
public:
   const int& x() const { return x_; }
private:
   int x_; 
};

仅授予读访问权限,但对每个客户端都有。

可以使用可以访问X的朋友函数。您应该认为它可能是出于某种原因而被声明的。@ Neelkrk:对,例如,如果类的设计者想要在以后扩展到多线程环境中使用它,未经审核的状态访问是一个游戏杀手。@NeilKirk我在好几个地方读到所有类变量都应该是私有的。你应该发布更多的内容,因为链接可能会在将来消失。为什么在函数名后面加上const?@kuhaku第一个
const
,以确保只读访问(注意它是一个ref,而不是返回的值)除此之外,在C++中(C)中的一个一般的经验法则是:习惯用法>代码> const,作为const CAN < /COD>——不必是可变的,应该总是声明为-<代码> const >。
那是什么?@kuhaku这就是所谓的ctor初始化。冒号后的表达式x(x)使用参数x的值初始化数据成员x。