关闭

c++中的成员访问级别和派生继承方式

标签: c++继承方式
283人阅读 评论(0) 收藏 举报
分类:

1.一个类中的不同变量和函数的访问属性

  总共有三种访问级别[public,private,protected]在类中定义的成员变量和成员函数的时候,如果不在变量前面加上访问级别修饰符,类中默认为私有成员变量或者私有成员函数,而在结构体中如果不写则默认为共有成员变量或共有成员函数,

什么意思呢,对于类(比如类名为a的一个类)中的成员变量或者成员函数,

||如果定义为public,那么这个变量或者函数在另外一个类(比如b)中这个b可能是一个普通类也可能是他的派生类(继承类),都可以访问,不管是通过类名访问静态公共变量,或者实例(a)出来的的对象,点出来的方式,或者指向某个类a对象的指针来访问。

        属于开放的在哪里都可以用合理的方式访问;

||如果定义为private,那么这个变量或者函数在另外一个类(比如b)中,这个b可能是一个普通类也可能是他的派生类(继承类),都可以访问,不管是通过类名访问静态公共变量,或者实例(a)出来的的对象,点出来的方式,或者指向某个类a对象的指针来访问都可以访问。永远都属于父类a自己的;

      属于自己的,在哪里都不可以通过这三种方式访问;

||如果定义为protected,那么这个变量或者函数在另外一个非派生类(比如b)中,是不可以访问的,如果是他的派生类(继承类)那就属于a这个类族的类是可以的,但是a的派生类,又在其他类中实例化,这个实例对象是一样可以访问a中的保护型成员变量或者成员函数,不管是通过a类名访问静态公共变量,或者实例(a)出来的的对象,点出来的方式,或者指向某个类a对象的指针来访问(a *p=new a(); p->m(a的公共函数或者变量))。

    属于整个类族的,但在外部类(一个没有继承过类a的类中)不能访问;


2.对于一个类的派生类的继承方式

1.公有继承(public)

  如果类c继承了类a继承方式为public,那么父类中的公有成员和保护成员都以原来的属性保存在派生类中,保存在当前这个或者说所有其派生类中,(当然父类中私有成员还是不可以直接访问),派生类中的新定义的成员变量新成员函数可以访问到父类中的公有成员和保护成员。

   在类族以外,这个派生类的对象和成员可以访问从父类中继承来的公有成员而不能访问保护成员,如果当前这个派生类继续被公有继承,新的派生类中一样可以访问基类a和他的父类从基类继承过来的所有成员变量和函数。这就是公有继承(public)

2.私有继承(private)

  父类中的公有成员和保护成员都以私有方式,保存在当前这个或者说所有其派生类中,(当然父类中私有成员还是不可以直接访问),派生类中的新成员变量新成员函数还是可以访问到父类中的公有成员和保护成员。

但是在类族以外,这个派生类的对象和成员不能访问从父类中继承来的 公有成员和保护成员了,如果当前这个派生类继续被公有继承,新的派生类中就不能在访问基类a和他的父类从基类继承过来的所有成员变量和函数。这就是私有继承。私有继承之后基l类a的成员无法在当前派生类以后的派生类中发挥作用,一般很少使用私有继承;

3.保护继承(protected)

  父类中的公有成员和保护成员都以保护级别保存在当前这个派生类中(当然父类中私有成员还是不可以直接访问),派生类中的新成员变量新成员函数可以访问到父类中的公有成员和保护成员。

但是在类族以外,这个派生类的对象和成员不能访问从父类中继承来的 公有成员和保护成员了,如果当前这个派生类继续被公有继承,新的派生类访问遵守公有继承原则,继续作为保护级别成员。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36923次
    • 积分:633
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:26篇
    • 译文:1篇
    • 评论:5条