📅  最后修改于: 2023-12-03 15:09:57.010000             🧑  作者: Mango
在C++中,类的数据成员可以被封装为公有、私有和保护三种访问权限。私有成员只能在类内部使用,而不能在类外部直接访问。
然而,有时候我们需要在类的外部访问私有数据成员,例如,在一个非成员函数中访问该类的私有数据成员。虽然我们不能直接访问私有成员,但是可以通过以下几种方式来访问:
使用get()和set()函数是最常见的方法。使用这种方式,类提供了一个公有接口,可以使用函数来获取或设置私有成员变量。
示例代码:
class MyClass {
private:
int myData;
public:
int getData() const {
return myData;
}
void setData(int newData) {
myData = newData;
}
};
int main() {
MyClass obj;
obj.setData(10);
std::cout << obj.getData() << std::endl;
return 0;
}
友元函数是一个独立于类的非成员函数,在声明中使用friend关键字。友元函数可以访问类的私有和保护成员。
示例代码:
class MyClass {
private:
int myData;
public:
friend void setData(MyClass& obj, int newData);
};
void setData(MyClass& obj, int newData) {
obj.myData = newData;
}
int main() {
MyClass obj;
setData(obj, 20);
std::cout << obj.myData << std::endl;
return 0;
}
使用指针可以直接访问类的私有成员。这种方式虽然行得通,但是不太安全,因为它打破了类的封装性。
示例代码:
class MyClass {
private:
int myData;
public:
int* getDataAddress() {
return &myData;
}
};
int main() {
MyClass obj;
*(obj.getDataAddress()) = 30;
std::cout << obj.myData << std::endl;
return 0;
}
所以,我们不能直接访问类的私有数据成员,但是可以通过get()和set()函数、友元函数和指针来访问私有成员。但是,这些方法都打破了类的封装性,所以应该尽量避免使用这些方法访问私有成员。