为了账号安全,请及时绑定邮箱和手机立即绑定
  • #include <iostream>

    #include <stdlib.h>

    #include <string>

    using namespace std;


    /**

     * 定义人类: Person

     * 数据成员: m_strName

     * 成员函数: attack()

     */

    class Person

    {

    public:

        string m_strName;

    void attack()

    {

    cout << "attack" << endl;

    }

    };


    /**

     * 定义士兵类: Soldier

     * 士兵类公有继承人类

     * 数据成员: m_strName

     * 成员函数: attack()

     */

    class Soldier:public Person

    {

    public:

    string m_strName;

    void attack()

    {

    cout << "fire!!!" << endl;

    }

    };


    int main(void)

    {

        // 实例士兵对象

    Soldier soldier;

        // 向士兵属性赋值"tomato"

        soldier.m_strName = "tomato";

        // 通过士兵对象向人类属性赋值"Jim"

    soldier.Person::m_strName = "Jim";

        // 打印士兵对象的属性值

    cout << soldier.m_strName << endl;

        // 通过士兵对象打印人类属性值

    cout << soldier.Person::m_strName << endl;

        // 调用士兵对象方法

        soldier.attack();

        // 通过士兵对象调用人类方法

        soldier.Person::attack();

    return 0;

    }


    查看全部
    0 采集 收起 来源:巩固练习

    2018-12-09

  • 在菱形继承中重定义是一定会出现的,为了避免这种情况可以使用宏定义,在被多继承的类的.h文件中加上#ifndef...#define......#endif

    查看全部
  • class Worker:virtual public Person
    {
    };
    class Farmer:virtual public Person
    {
    };
    class MigrantWorker:public Worker,public Farmer
    {
    };

    工人类要继承人类农民类也要继承人类农民工类多继承工人类农民类,这时农民工类里面会有两份人类的数据成员,这是错误的,使用虚继承virtual就能避免这个问题,产生的对象中就只有一份人类的数据成员了

    菱形继承

    查看全部
  • 三种方式:

    void test1 (Person p):会实例化一个临时对象p,所以有销毁对象的痕迹

    void test2 (Person &p):只是起了一个别名

    void test3 (Person *p):同test2

    test2.test3并不会产生临时变量,效率更高

    查看全部
  • 当使用父类的一个指针去指向一个子类的对象,先调用父类的构造函数再调用子类的构造函数在销毁父类对象的时候是不会执行子类的析构函数的,这样就有可能导致内存泄漏,为了避免这种情况,可以使用虚析构函数,加上关键字virtual,先调用子类的析构函数再调用父类的析构函数

    查看全部
  • 父类实例化的对象可以接收子类的对象,但是会发生数据成员的截断

    :士兵(子类)一定是人(父类),人却不一定是士兵

    查看全部
    0 采集 收起 来源:[C++]isA

    2018-12-05

  • 当进行protected保护继承的时候,父类中的public和protected成员都会被继承到子类的protected中,所以子类实例化的对象只能访问到子类本身的公有成员,无法访问子类中的protected,当然private肯定也是是不行的

    查看全部
  • https://img1.sycdn.imooc.com//5c0678e200014c3808400156.jpg子类实例化的对象不能操作父类中的protected成员

    查看全部
  • 当不涉及继承的时候:protected=private

    公有继承public时:public继承到public下面

                                  protected继承到protected下面

                                   private继承到无法访问的区域

    查看全部
    0 采集 收起 来源:[C++]公有继承

    2018-12-04

  • 虚继承的写法

    查看全部
  • 菱形继承的定义

    查看全部
  • 多继承的书写方式

    查看全部
  • 这三个类多继承

    查看全部
  • 这三个类互为多重继承

    查看全部
  • `````````````````

    查看全部
    0 采集 收起 来源:[C++]isA

    2018-11-09

举报

0/150
提交
取消
课程须知
本课程是C++初级课程 熟练掌握C++语言基础语法,如需要学习C++基础语法的可以看《C++远征之起航篇》、《C++远征之离港篇》、《C++远征之封装篇(上)》、《C++远征之封装篇(下)》
老师告诉你能学到什么?
1、什么是继承 2、基类和派生类的概念 3、继承的三种方式 4、多重继承和多继承 5、虚继承是怎么回事

微信扫码,参与3人拼团

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!