C++ public、private和protected的区别(附带实例)
类具有封装性,封装在类里的数据可根据需要设置为外部可见或外部不可见,即其他类是否可以访问该数据成员。
类的访问属性可通过 public、private 和 protected 3 个关键字实现。属性为 public 的类成员可以在类作用域外被访问,属性为 private 和 protected 的类成员则只能在类作用域内被访问。
例如,在头文件 Person.h 中有如下代码:
在实现文件 Person.cpp 中有如下代码:
将不想被其他类访问和调用的类成员定义为 private 或 protected 属性,可以保证类成员的隐蔽性,从而实现封装效果。例如:
类的访问属性可通过 public、private 和 protected 3 个关键字实现。属性为 public 的类成员可以在类作用域外被访问,属性为 private 和 protected 的类成员则只能在类作用域内被访问。
- public 属性:公有属性,即类成员对外可见,对内也可见;
- private 属性:私有属性,即类成员对外不可见,对内可见。此为默认属性,未指定访问属性的成员会被默认为是 private 属性;
- protected 属性:保护属性,即成员对外不可见,对内可见,对派生类可见。
例如,在头文件 Person.h 中有如下代码:
class CPerson // 定义CPerson类 { int m_ilndex; // 未指定访问属性,默认为 private int getlindex() // 未指定访问属性,默认为 private { return m_ilndex; } };
在实现文件 Person.cpp 中有如下代码:
#include<iostream> #include"Person.h" int main() { CPerson p; // 定义CPerson类的对象p p.m_ilndex=100; // 编译错误,private属性的类成员无法在类体外访问 cout<<"m_ilndex is:"<<p.getlndex()<<endl; // 编译错误,private属性的类成员无法在类体外访问 }上面的代码无法通过编译,这是因为默认状态下 CPerson 类成员的属性为 private,只能被类中的成员访问,不能被外部访问。也就是说,m_iIndex 只能在类体作用域内被访问和赋值,CPerson 类的对象 p 无法对其赋值。
将不想被其他类访问和调用的类成员定义为 private 或 protected 属性,可以保证类成员的隐蔽性,从而实现封装效果。例如:
class CPerson // 定义CPerson类 { private: int m_ilndex; // m_ilndex为private属性,无法在类体外访问和调用 public: int getlndex() // getlndex()为public属性,可以在类体外访问和调用 { return m_ilndex; } int setlndex(int ilndex) // setlndex()为public属性,可以在类体外访问和调用 { m_ilndex = ilndex; return 0; } };