关于C++中的访问说明符
About Access Specifier in C++
我正在阅读一本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#和许多其他语言中也是如此。
相关文章:
- 函数模板签名中忽略的成员类型def 的访问说明符
- C++ 访问说明符理解
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 访问说明符和性能
- 访问说明符外部的 C++ 类成员
- 在scons中将访问说明符从private更改为public
- 使用Astmatcher获得至少两个相同访问说明符的课程
- 内联访问说明符出现语法问题
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- 访问has-a关系的访问说明符
- 访问说明符不会更改可访问性级别.这是什么意思
- 关于C++中的访问说明符
- 关于访问说明符的困惑
- 类定义中的宏相关访问说明符是否会导致未定义的行为
- 为什么虚函数无视访问说明符?C++
- 模拟 C 中的访问说明符
- 访问说明符对好友函数是否重要
- 细粒度访问说明符 c++
- 对基于访问说明符的特定重载函数使用声明
- 在C++中,do访问说明符不控制静态成员的可见性