Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++_Visual C++_C++11 - Fatal编程技术网

C++ 可以从同一类型的另一个对象访问私有变量吗?

C++ 可以从同一类型的另一个对象访问私有变量吗?,c++,visual-c++,c++11,C++,Visual C++,C++11,可能重复: C++类的私有成员被设计成对其他类实例不可见。我很困惑,因为私人成员可以访问如下所示!谁能给我解释一下吗 这是我的密码: #include <iostream> using namespace std; class Person { private: char* name; int age; public: Person(char* nameTemp, int ageTemp) { name = new char[str

可能重复:

C++类的私有成员被设计成对其他类实例不可见。我很困惑,因为私人成员可以访问如下所示!谁能给我解释一下吗

这是我的密码:

#include <iostream> 
using namespace std; 
class Person
{
private:
    char* name;
    int age;
public:
    Person(char* nameTemp, int ageTemp)
    {
      name = new char[strlen(nameTemp) + 1];
      strcpy(name, nameTemp);
      age = ageTemp;
    }
    ~Person()
    {
      if(name != NULL)
        delete[] name;
      name = NULL;
    }
    bool Compare(Person& p)
    {
      //p can access the private param: p
      //this is where confused me
      if(this->age < p.age) return false;
        return true;
    }
};
int main() 
{ 
  Person p("Hello, world!", 23);
  return 0; 
}
#包括
使用名称空间std;
班主任
{
私人:
字符*名称;
智力年龄;
公众:
人员(字符*nameTemp,int-ageTemp)
{
名称=新字符[strlen(nameTemp)+1];
strcpy(名称、名称和温度);
年龄=年龄温度;
}
~Person()
{
if(name!=NULL)
删除[]名称;
name=NULL;
}
bool比较(个人和p)
{
//p可以访问私有参数:p
//这就是我困惑的地方
如果(this->age

类的方法可以访问所有类实例中的私有属性,至少在C++中。

< P>当变量被指定为私有时,这意味着只有该类的方法和被指定为朋友的类和方法可以访问它。该类的任何实例都可以访问同一类的所有其他实例的私有变量。

属于
Person
类型的任何代码片段都可以访问任何
Person
对象的
public
protected
private
变量


类型在这里很重要,而不是实例。

类之外的任何访问都是“禁止的”。除非您使用friend类。(允许任何其他类访问该类的私有成员)

您可以这样定义friend类:

class MyClass {
    friend class MyClassB;
public:
    MyClass();
    ~MyClass();
private:
    int number;
};
然后MyClassB将有权访问“MyClass”的私有变量

如果您这样做:

class MyClass {
public:
    MyClass();
    ~MyClass();
private:
    int number;
};


int main(int argc, char *argv[])
{
    MyClass A;
    A.number = 11; // You can't do this
    if(A.number > 10) { // Either you can't do this.
        qDebug() << "It's more than 10"; // Qt. well.
    }


    return 0;
}
class-MyClass{
公众:
MyClass();
~MyClass();
私人:
整数;
};
int main(int argc,char*argv[])
{
我的A级;
A.number=11;//你不能这样做
如果(A.number>10){//,则您不能这样做。
qDebug()10){
qDebug()

希望获得以下帮助:)

这是基于每个类,而不是每个对象。请尝试从主函数访问p.age-这就是它所阻止的,在类外访问。使用std::string保存字符串。目前,由于您不遵守三个规则(这是一个问题)。请记住,访问说明符不是一种安全机制。它是一种防止其他作者意外错误更改对象状态的机制。作为person的作者,您希望能够从其他实例中正确修改状态。嗯…+1'因为这个答案是正确的,但有人经常这样做吗?我很激动绞尽脑汁想我需要做的任何时候。重载操作符时,你很可能需要它,就像所给出的例子一样。除此之外,我认为这是一个罕见的用例。
class MyClass {
public:
    myClass() {
       number = 10;
       if(number > 10) {
           qDebug() << "It's more than 10"; // Qt. well.
       }
   }
    ~MyClass();
private:
    int number;
};
if(this->age < p.age) return false;
int main() 
{ 
    Person p("Hello, world!", 23);
    // will be error, because main is not inside class People
    if (p.age < 18) {   
       cout << "You are not adult" << endl;
    }
    return 0; 
}