关于C++类成员访问级别(public,protected,private)与继承的形式(public, private)

来源:互联网 发布:java架构师书籍知乎 编辑:程序博客网 时间:2024/05/17 09:10

最近在看effective C++,看到第六部分——继承与面向对象设计,对类成员访问级别(public,protected,private)与继承的形式(public, private)的有时候会有点迷糊,这里理清一下思路。


我觉得首先要弄清楚,类的定义和类的使用。

简单来说,类的定义就是设计类里面应该有什么成员函数,什么数据,以及成员函数的实现。而类的使用是通过定义好的类来产生对象,及定义一个类的对象,便能够使用类(当然也可以是指针和引用)。


对于类成员的访问级别有public,protected,private。那么什么时候需要访问类呢?我觉得有两种情况,第一种是我定义一个类的对象,指针,引用(这也是我们说的类的使用),第二种是子类定义的时候。

对于第一种:在我们定义一个类的对象的时候,我们通过对象来发挥出类的功能,但是我们只能访问级别为public的成员函数和变量。

对于第二种:在子类的定义的时候,我们能够使用父类的public和protected成员函数和变量

所以,private成员函数和变量只能在类自己定义的过程中使用。


那么问题来了,对于子类的对象来说,我们能访问哪些函数呢?

这里我们看看继承的形式。继承的形式常用的有两种(public和private)(一般很少用protected继承,这里不讨论了)。我们假设基类为class Base, 子类为 class Derived. 

1、如果子类(Derived)通过public继承了基类Base。

Base类的访问级别            ----- public继承------               子类对象(不是子类定义)看到的级别

   public                                                                                           public

  protected                                                                                          protected

   private                                                                                          private

因此子类对象只能访问父类Base中的public 成员函数和数据。但是子类定义的过程中,我们能够使用父类的public和protected成员函数和变量

2、如果子类(Derived)通过private继承了基类Base。

Base类的访问级别            ----- private继承------               子类对象(不是子类定义)看到的级别

   public                                                                                          private

  protected                                                                                          private

   private                                                                                          private

因此子类对象无法访问父类Base中的所有成员函数和变量。但是子类定义的过程中,我们仍然能够使用父类的public和protected成员函数和变量


所以,我觉得在准备一个类的成员函数和变量时,一定区分清楚到底是在哪儿用?是在类的定义中(那么此时你是功能的提供者),还是类的对象(此时你是功能的使用者)。

0 0
原创粉丝点击