首页 > 编程笔记 > C++笔记 阅读:50

C++ public、private和protected的区别(附带实例)

类具有封装性,封装在类里的数据可根据需要设置为外部可见或外部不可见,即其他类是否可以访问该数据成员。

类的访问属性可通过 public、private 和 protected 3 个关键字实现。属性为 public 的类成员可以在类作用域外被访问,属性为 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;
    }
};

相关文章