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
#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;
}