C++ public ptotected private

C++ public ptotected private教程

C++ 中,所有的 成员变量成员函数 都有访问权限,所谓的访问权限,就是我们到底能不能访问该类中的成员变量和成员函数。

C++ 中,用来控制访问权限的 关键字 有 public、protected 和 private,它们分别表示公有的、受保护的和私有的,同时,它们被统称为成员访问限定符。

C++ public ptotected private区别

访问修饰符 描述
public 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问。
protected 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问。
private 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问 。

C++ public ptotected private继承后属性变化

继承方式 描述
private继承 父类的所有方法在子类中变为 private。
protected继承 父类的 protected 和 public 方法在子类中变为 protected,private 方法不变。
public继承 父类中的方法属性不发生改变。

C++ public ptotected private继承方式

基类 继承方式 子类
public public public
public protected protected
public private private
protected public protected
protected protected protected
protected private private
private public 子类无权访问
private protected 子类无权访问
private private 子类无权访问

说明

由上可以看出,public 继承不改变基类成员的访问权限,private 继承使得基类所有成员在子类中的访问权限变为 private,protected 继承将基类中 public 成员变为子类的 protected 成员,其它成员的访问权限不变。基类中的 private 成员不受继承方式的影响,子类永远无权访问。

案例

C++ public protected private使用

C++ public protected private可访问性

#include <iostream> using namespace std; class Student { public: Student(string name, int age):m_name(name), m_age(age) { } void sayHello() { cout << "I am " << m_name << " and i am " << m_age << " years old!" << endl; } ~Student() { cout << "Call ~Student" << endl; } protected: int m_age; private: string m_name; }; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; Student stu("HaiCoder", 109); cout << stu.m_age << endl; return 0; }

程序运行后,控制台输出如下:

28_C public protected private区别.png

我们在 main 函数,访问了类的 protected 成员,结果程序报错,因为,类的私有成员不可以在类外面访问,现在,我们修改程序如下:

#include <iostream> using namespace std; class Student { public: Student(string name, int age):m_name(name), m_age(age) { } void sayHello() { cout << "I am " << m_name << " and i am " << m_age << " years old!" << endl; } ~Student() { cout << "Call ~Student" << endl; } public: int m_age; private: string m_name; }; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; Student stu("HaiCoder", 109); cout << stu.m_age << endl; return 0; }

程序运行后,控制台输出如下:

29_C public protected private区别.png

这次,我们将成员变量修改成了 public,此时,在类外部,我们可以访问了。

C++ public ptotected private教程总结

C++ 中,用来控制访问权限的关键字有 public、protected 和 private,它们分别表示公有的、受保护的和私有的,同时,它们被统称为成员访问限定符。

public 修饰的成员变量和函数可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问,protected 修饰的成员变量和函数可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问。

private 修饰的成员变量和函数只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问。