第43课 继承的概念及意义

1. 类之间的组合关系

(1)组合关系:整体与部分的关系

【实例分析】组合关系的描述

#include <iostream>

using namespace std;

//内存类
class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    } 

    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

//硬盘类
class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    } 

    ~Disk()
    {
        cout << "~Disk()" << endl;
    }
};

//CPU类
class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    } 

    ~CPU()
    {
        cout << "~CPU()" << endl;
    }
};

//主板类
class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    } 

    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }
};

//计算机类
class Computer
{
    //组合关系:部分-整体关系(与Computer对象同生命期)
    Memory mMem;
    Disk   mDisk;
    CPU    mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    } 

    void power()
    {
        cout << "power()" << endl;
    }

    void reset()
    {
        cout << "reset()" << endl;
    }

    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

int main()
{
    Computer c; //先构造成员对象(按声明顺序),再调用类构造函数

    return 0;
}

(2)组合关系的特点

  ①将其它类的对象作为当前类的成员使用

  ②当前类的对象与成员对象的生命期相同

③成员对象在用法上与普通对象完全一致

2. 继承关系

(1)父子关系

(2)惊艳的继承

  ①子类拥有父类的所有属性和行为

  ②子类就是一种特殊的父类

  ③子类对象可以当作父类对象使用

  ④子类中可以添加父类没有的方法和属性

【编程实验】继承初体验

#include <iostream>

using namespace std;

class Parent
{
    int mv;
public:
    Parent()
    {
        cout << "Parent()" << endl;
        mv = 100;
    } 

    void method()
    {
        cout << "mv = " << mv << endl;
    }
};

class Child : public Parent //:public Parent描述继承关系
{
public:
    void hello()
    {
        cout << "I‘m Child class!" << endl;
    }
};
int main()
{
    Child c;

    c.hello(); //子类函数
    c.method();//父类

    return 0;
}

(3)重要规则

  ①子类就是一个特殊的父类

  ②子类对象可以直接初始化父类对象

  ③子类对象可以直接赋值给父类对象

3. 继承的意义

  继承是C++是代码复用的重要手段。通过继承,可以获得父类的所有功能,并且可以在子类中重写己有的功能,或者添加新功能

【编程实验】继承的强化练习

#include <iostream>
#include <string>

using namespace std;

//内存类
class Memory
{
public:
    Memory()
    {
        cout << "Memory()" << endl;
    } 

    ~Memory()
    {
        cout << "~Memory()" << endl;
    }
};

//硬盘类
class Disk
{
public:
    Disk()
    {
        cout << "Disk()" << endl;
    } 

    ~Disk()
    {
        cout << "~Disk()" << endl;
    }
};

//CPU类
class CPU
{
public:
    CPU()
    {
        cout << "CPU()" << endl;
    } 

    ~CPU()
    {
        cout << "~CPU()" << endl;
    }
};

//主板类
class MainBoard
{
public:
    MainBoard()
    {
        cout << "MainBoard()" << endl;
    } 

    ~MainBoard()
    {
        cout << "~MainBoard()" << endl;
    }
};

//计算机类
class Computer
{
    //组合关系:部分-整体关系(与Computer对象同生命期)
    Memory mMem;
    Disk   mDisk;
    CPU    mCPU;
    MainBoard mMainBoard;
public:
    Computer()
    {
        cout << "Computer()" << endl;
    } 

    void power()
    {
        cout << "power()" << endl;
    }

    void reset()
    {
        cout << "reset()" << endl;
    }

    ~Computer()
    {
        cout << "~Computer()" << endl;
    }
};

//惠普笔记本
class HPBook : public Computer
{
    string mOS;
public:
    HPBook()
    {
        mOS = "Windows 8"; //预装Windows8操作系统
    }

    void install(string os)
    {
        mOS =os;
    }

    void OS()
    {
        cout << mOS << endl;
    }
};

//苹果电脑
class MacBook : public Computer
{
public:
    void OS()
    {
        cout << "Mac OS" << endl;
    }
};

int main()
{
    HPBook hp;

    hp.power(); //开机
    hp.install("Ubuntu 16.04 LTS");
    hp.OS();

    cout << endl;

    MacBook mac;
    mac.OS();

    return 0;
}

4. 小结

(1)继承是面向对象中类之间的一种关系

(2)子类拥有父类的所有属性和行为

(3)子类对象可以当作父类对象使用

(4)子类中可以添加父类没有的方法和属性

(5)继承是面向对象中代码复用的重要手段

时间: 2024-12-29 07:13:40

第43课 继承的概念及意义的相关文章

第43课 继承的概念和意义

面向对象的高端课程都是和继承相关的,例如设计模式. 思考: 类与类之间是否存在直接的关联关系? 生活中的例子: 组合关系的程序描述: 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Memory 7 { 8 public: 9 Memory() 10 { 11 cout << "Memory()" << endl; 12 } 13 ~

C++--继承的概念和意义、继承中的访问级别、不同的继承方式

一.继承的概念和意义 Q:类之间是否存在直接的关联关系?由这个问题由此联想到生活中的例子:组合A.组合关系:整体与部分的关系组合关系的描述--代码示例 #include <iostream> #include <string> using namespace std; class Memory { public: Memory() { cout << "Memory()" << endl; } ~Memory() { cout <&

第49课 多态的概念和意义

1. 函数重写回顾 (1)父类中被重写的函数依然会继承给子类 (2)子类中重写的函数将覆盖父类中的函数 (3)通过作用域分辨符(::)可以访问到父类中的函数 Child c; Parent* p = &c; c.Parent::print(); //从父类中继承 c.print(); //在子类中重写 p->print(); //父类中定义 2. 面向对象中期望的行为 (1)根据实际的对象类型判断如何调用重写函数 (2)父类指针(引用) ①指向父类对象时,则调用父类中定义的函数 ②指向子类对

继承的概念和意义

类和类之间的关联关系 组合关系:整体与部分的关系 继承关系(父子关系) 组合关系的特点 将其它类的对象作为类的成员使用 当前类的对象与成员对象的生命期相同 成员对象在用法上与普通对象完全一致 面向对象中的继承指类之间的父子关系 子类拥有父类的所有属性和行为 子类就是一种特殊的父类 子类对象可以当作父类对象使用 子类中可以添加父类没有的方法和属性 C++中通过下面的方式描述继承关系 1 class Parent 2 { 3 int mv; 4 public: 5 void method(); 6

重载模块概念及意义

# -*- coding: utf-8 -*- #python 27 #xiaodeng #重载模块概念及意义 #正如我们所看见的那样,模块程序代码默认只对每一个过程执行一次,要强制使模块代码重新载入并重新运行,你需可以要求python #这么做,也就是调用reload内置函数. #导入模块只会在第一次被导入时,加载和执行该模块中的代码 #之后导入只会使用已加载的模块对象,而不会重新加载执行文件中的代码 #reload函数会强制已加载的模块的代码重新载入并重新运行.此文件中心的代码的赋值语句会在

继承的概念

1.继承的概念 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 2.多个类可以称为子类,单独这个类称为父类或者超类. 3.子类可以直接访问父类中的非私有的属性和行为. 4.通过 extends 关键字让类与类之间产生继承关系. class SubDemo extends Demo{} 2.继承的好处: 1.继承的出现提高了代码的复用性. 2.继承的出现让类与类之间产生了关系,提供了多态的前提. 3.继承的特点 1.Java

Java知多少(27)继承的概念与实现

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承可以理解为一个类从另一个类获取方法和属性的过程.如果类B继承于类A,那么B就拥有A的方法和属性. 继承使用 extends 关键字. 例如我们已经定义了一个类 People: 1 class People{ 2 String name; 3 int age; 4 int height; 5 6 void say(){ 7 System.out.println("我的名字是 " + n

Review的概念与意义

是什么让Google的程序如此优秀 让Google的程序如此优秀的一个最重要的事情看起来是非常的简单:代码审查 在Google,没有程序,任何产品.任何项目的程序代码,可以在没有经过有效的代码审查前提交到代码库里. 从代码审查里能得到什么? •在代码提交前,用第二群眼睛检查一遍,防止bug混入.这是最常见的理解,也是它最不重要的一点. •代码审查的最大的功用是纯社会性的.如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了.你写出的代码将更加整洁,有更好的注释,更好的程序结构—

C++--模板的概念和意义、深入理解函数模板、类模板的概念和意义

一.模板的概念与意义 Q:C++中有几种交换变量的方法?定义宏代码与定义函数A.定义宏代码优点:代码复用,适合所有的类型缺点:编译器不知道宏的存在,缺少类型检查B.定义函数优点:真正的函数调用,编译器对类型进行检查缺点:根据类型重复定义函数,无法代码复用 C.泛型编程--不考虑具体数据类型的编程方式Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型C++中的泛型编程函数模板--一种特殊的函数可用不同类型进行调用,看起来和普通函数很相似,区别是类型可被参数化函数模板的语法规则1.