C++ 公有继承 【GeekBand 第三周】

1.类继承

1.1面向对象的类继承,能从已有的类派生出新的类,称派生类;派生类继承了基类的特征、方法,相较于直接修改原代码,更简单,且原基类能重复使用。
1.2利用继承可做:修改基类方法以实现不同于基类的功能,添加新的方法以实现新的功能,添加新的数据以满足新功能所需。
1.3继承可以在基类的基础上添加属性但不能删除基类的属性。

2.公有继承

2.1使用公有派生:

基类的公有成员将成为派生类的公有成员,基类的私有成员将成为派生类的一部分(也是私有的),只能通过 基类 的公有和保护方法访问

派生类存储了基类的数据成员,即 派生类继承了基类的实现; 派生类可以使用基类的方法,即 派生类继承了基类的接口。

对派生类而言:需要自身的构造函数,根据功能需要添加新的数据成员和函数成员。
例如:基类:Student(学生),包含数据:name,number,age;包含成员函数:Change_age(),(年龄增长)。
派生类:C_Student(C语言课程学生),继承自Seudent ,添加:新的数据:C_score (C语言成绩),新的方法:C_Test(),(进行考试以获得成绩)。
基类:

class Student
{
private:
    int number;
    int age;
    string name;
public:
    Student();
    void Change_age() { age++; };
};

派生类;

class C_Student: public Student
{
private:
    int C_score;
public:
    C_Student();
    C_Test() 
    { 
        ...;
        C_score = xxx;
    };
};

继承基类的派生类,需注意其构造函数的实现
由于派生类不能直接访问基类的私有成员,只能通过基类公有方法访问,因此:派生类不能直接设置基类私有成员(name\age\number),只能通过此处基类公有的方法,即:派生类构造函数需使用基类的构造函数来构造基类

C_Student::C_Student(_):Student(_),C_score(_)  {}

其中的 _ 为参数,视具体情况而定。

创建派生类时首先创建基类对象:通过派生类构造函数代码显示调用相应基类构造函数,否则将调用基类的默认构造函数 (Student() ,无参数)。
基类构造函数 应当在 派生类构造函数的 成员初始化列表 中调用,将参数传递给基类构造函数。
过程类似于:

f1(i,j)
{ 
    ...;
    f0(i);
}

f1()调用f0(),并将f0()所需参数 i 传递给f0(), 只不过对继承而言,f0()应当在初始化列表中使用;
在释放对象时,同样可以用调用来解释:

~f1()
{ 
    ...;
    ~f0();
}

~f1() 调用 ~f0(),因此首先执行派生类析构函数,后调用基类析构函数,不过对于继承而言:类似于 ~f1(){ …;}:~f0() 。

2.2派生类和基类间的关系:

基类指针可直接 指向 派生类对象,即可以用派生类对象中的基类对象信息 赋给基类指针,反之不行,不能将派生类指针 指向 基类对象,因为基类对象中没有派生类新添加的信息,不能传递给派生类指针。(对于引用亦如此)
基类指针或引用 指向 派生类对象后,只能用于调用基类方法,不能调用派生类新添加的方法。

形参为 指向基类的指针(基类引用) 的函数,可将基类对象的地址传入,也可以将派生类对象地址传入。

 void foo( Student & s ) 
{
    std::cout << "Name:" << s.name;
 }

显示学生姓名,也可以将C语言学生传入,显示C语言学生的姓名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值