可以从同一类型的另一个对象访问私有变量
A private variable can be accessed from another object of the same type?
可能重复:
使用私有修饰符,为什么可以直接访问其他对象中的成员?
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;
}
类的方法可以在所有类实例中访问其私有属性,至少在C++中是这样。
任何"属于"类型Person
的代码片段都可以访问任何Person
对象的public
、protected
和private
变量。
类型在这里很重要,而不是实例。
当一个变量被指定为私有变量时,意味着只有该类的方法以及指定为友元的类和方法才能访问它。该类的任何实例都可以访问同一类的所有其他实例的私有变量。
if(this->age < p.age) return false;
p.age:age是私有的,可以这样访问,因为此行在类的方法内部,所以它可以访问所有私有成员。
如果将p.age
放在类的方法之外,它会注意到错误。例如:
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;
}
希望得到帮助:(
类外的任何访问都是"禁止的"。除非你使用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;
}
你会得到一个"错误",因为你试图从类外访问A.number。
但如果你想从类内的某个函数访问:
class MyClass {
public:
myClass() {
number = 10;
if(number > 10) {
qDebug() << "It's more than 10"; // Qt. well.
}
}
~MyClass();
private:
int number;
};
相关文章:
- Qt:从另一个窗口访问公共对象
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 我如何访问一个对象的向量的成员变量,该对象是从类中的成员变量
- 尝试访问对象数组中的对象,但只保存了一个对象
- 通过"this"访问另一个对象的定义?
- 当一个对象试图访问它的某个属性时,程序是否可能发送Segfault
- 通过另一个对象C++的字段中的指针访问对象
- 我所有应用程序类都可以访问一个对象
- 在一个线程中创建一个对象,并使用std :: Atomic访问另一个对象
- 如何有效地从该对象中包含的另一个对象访问对象字段/属性
- 如何将此对象传递给另一个对象并使用友元类 (c++) 访问其变量
- 是否可以使用相同的基类从另一个派生对象访问派生对象
- 从同一类中的另一个成员对象访问成员对象
- 将自定义类型传递给另一个对象后,如何访问该类型
- 从另一个进程访问STA对象时出现问题
- 为什么我的对象无法访问在公共基类中定义的另一个对象的受保护成员?
- 如何在C++中访问一个项目中具有相同类型/类的所有对象
- 从另一个对象访问一个对象的方法(有更好的方法吗?)
- c++linux从一个方法访问一个对象