关于C++中的访问说明符

About Access Specifier in C++

本文关键字:访问 说明符 C++ 关于      更新时间:2023-10-16

我正在阅读一本C++手册,在关于创建自定义字符串类的一章中,我进入了这段代码:

string& string::operator = (const string& Str)
{
char* temp = new char[Str.m_Length];
m_Length = Str.m_Length;
memcpy(temp,Str.m_Data,m_Length);
delete [ ] m_Data;
m_Data = temp;
return *this; 
}

它是关于复制构造函数的实现。一切正常,我不能抱怨它的效率,但我没有得到的是如何从 Str 字符串中读取m_Length和m_Data变量,因为它们是类的私有成员。我将向您展示类界面:

class string
{
public:
string();
string (const string& Str);
string& operator = (const string& Str);
~string();
string(char* p);
private:
short m_Length;
char* m_Data;
};

这是否可能,因为我们在函数中调用了 Str 作为参考值?还是什么?

访问说明符相对于类,而不是该类的实例。 private 表示对类私有,而不是对该类型的对象私有。也就是说,任何类型 string 的对象都可以访问任何其他string对象的private成员。

"这不是打破封装吗?"我听到你哭了。其实不然。我们倾向于通过更改该类的内部实现时会中断的函数数量来衡量类的封装。string的成员函数已经与私有成员紧密耦合,因此允许访问相同类型的其他对象的私有成员不会丢失封装。有关封装的更多信息,请阅读"非成员函数如何改进封装"。

我可能也想知道为什么C++这样奇怪,但你可能会惊讶地发现,在Java,C#和许多其他语言中也是如此。