在面向对象的语言中,这3个关键词应该都是要用到。虽然c++、java、go、python都是面向对象的语言,但是语法和用法都有或多或少的区别,并不能学一门语言就能学会其他多门语言,他们的区别还是需要区分清楚的。
(总有人说学会一门语言就其他语言都会了,千万不要信!如果真是这样的话,那一种语言就能一统天下了,别人闲的没事干发明这么多语言。只能说学会一门语言后有了编程基础,学其他语言会上手快一些而已!)
一篇文章介绍不完,这里就先介绍c++中这3个关键词的使用。
学习这件事还是要站在巨人的肩膀上,本文也是借鉴了这篇文章https://blog.csdn.net/ycf74514/article/details/49053041
成员的访问权限
1 public访问权限
public修饰的成员变量和成员函数,类内的成员函数和类的实例变量可访问。
实际上,类的成员函数,可以访问本类内的任何成员变量和成员函数。
#include
2 protected访问权限
protected修饰的成员变量、成员函数,类的实例变量无法访问。但是可以通过类的友元函数、友元类进行访问。
#include
3 private访问权限
private成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。
#include
从上面来看,protected和private没有区别。区别主要体现在继承上面。后面会讲。
一句话总结:public在任何地方都能访问。proteted和private不能被实例访问,但可以被友元函数访问。
继承的访问权限控制
c++的类继承分为public、protected和private继承,不像java那样只有一种继承。
1 public继承
派生类通过public继承,基类的各种权限不变 。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,可以访问基类的public成员,但是无法访问protected、private成员,仿佛基类的成员之间加到了派生类一般。
#include
一句话总结:public继承看成派生类将基类的public,protected成员囊括到派生类,但是不包括private成员。
2 protected继承
派生类通过protected继承,基类的public成员在派生类中的权限变成了protected 。protected和private不变。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,无法访问基类的任何成员,因为基类的public成员在派生类中变成了protected。
#include
一句话总结:可将protected继承看成派生类将基类的public,protected成员囊括到派生类,全部作为派生类的protected成员,但是不包括private成员。
3 private继承
派生类通过private继承,基类的所有成员在派生类中的权限变成了private。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,无法访问基类的任何成员,因为基类的所有成员在派生类中变成了private。
#include
一句话总结:可以将private继承看成派生类将基类的public,protected成员囊括到派生类,全部作为派生类的private成员,但是不包括private成员。
对比总结:
- 类的实例只能访问基类public成员,友元类和函数可以访问基类的任何成员;
- public、protected和private继承可以看成派生类将基类的成员囊括到派生类,但是超过继承权限的基类成员会被更改权限。