Lesson 17 继承与派生基础

来源:互联网 发布:淘宝哪家饰品店好 编辑:程序博客网 时间:2024/05/17 22:52

一、继承:

子类是父类的一种!is a;特化/泛化

<span style="font-size:18px;"><span style="font-size:18px;">class Person{public:void think();void work();private:string m_strName;bool m_bGender;int m_iAge;};class Teacher:Person{public:void teach();private:int money;};</span></span>

继承和派生的关系:(基类/父类,派生类/子类

继承是在一个已经存在的类的基础上建立一个新的类;

派生是从已经有的类(父类)产生一个新了子类;

分类:

1. 单重继承:继承于一个父类

2. 多重继承:多个父类,同时是2个类的一种情况;


1. 单级继承:继承关系只有2层

2. 多级继承:超过2层


继承声明:

1. 单重继承:
class <派生类名>:[继承方式]<基类>
{
// 添加新成员
};


2. 多重继承:  // 多重继承下,继承方式不能共享

class <派生类名>:[继承方式]<基类1, [继承方式]<基类2>, ...
{
// 添加新成员
};

3. 默认继承方式(省略情况下的继承方式):

class: private;

struct: public


注意:

class A

{

public:

int mval;

}

class B: public A

{

public: 

int mval;  // 这个是可以定义的,不算重定义,这是重名隐藏

}


B b;  

b.mval; // 调用的是B里的成员,要调用A里的成员要:

b.A::mval;  // 可以访问,所以B里是分配了A里的成员内存的


构造函数初始化:

1. 在派生类的构造函数中,要对父类的属性赋初值要调用父类的构造函数


二、继承过程

1)吸收基类成员


2)调整基类成员

调整基类的public, private属性

class A : public B;


A类publicprotectedprivateB类外publicprotectedInAccessibleB类内publicprotectedInAccessibleclass A : protected B;
A类publicprotectedprivateB类外NNInAccessibleB类内YYInAccessibleclass A : private B;
A类publicprotectedprivateB类外NNNB类内YYN
InAccessible:不可直接访问

继承方式:

1. 控制的是子类成员函数与对象的访问方式;

public:

子类继承了父类的protected, private原态;


protected:

父类 ->子类: public, protected-->proteced ; private不变 ;  // 类外即用对象无法直接访问属性,但可以用函数接口间接访问;


private:  has a关系

父类->子类: public, protected, private-->private; 


总结:基类成员在派生类中的访问权限,由基类成员权限与继承权限取小的那个权限,而private成员永远是不可访问的!!!


public , protected成员 在protected, privated继承下都是只能在类内访问,为外不能访问;

对于单级继承,private与protected继承没有区别,但对于多级继承来说,private继承对于第三重继承,无法访问第一重的public, protected成员,造成了截断!


派生类只能获得直接基类的成员,不能获得间接基类的成员,要通过直接基类来获得间接基类的成员;


调整基类成员在子类中的权限:

using <父类名>::成员名;  // 该方法当然只能针对父类中非inAccessible的成员变量


3)增加派生类成员






0 0
原创粉丝点击