为了账号安全,请及时绑定邮箱和手机立即绑定
  • 使用父类指针指向子类对象时,如果一个集合里又有三角形又有矩形又有圆形,但是每个类里面都有一个单独的计算面积的成员函数,采用虚函数的方式,可以确保找到正确的计算面积的成员函数。 动态多态(晚绑定):例如父类father有个方法名字叫go(){“父类的go”}; 子类son有个方法也叫go(){“son的go”}; 子类daughter有个方法也叫go(){“daughter的go”}; father *p1=new son; father *p2=new daughter; 然后当我们执行 p1->go(); p2->go(); 输出的结果都只是父类的go;如果想实现输出"son的go"和"daughter的go",就需要在父类的go()方法得前面加上关键字virtual变成。这样再输入p1->go();p2->go();就可以输出"son的go"和"daughter的go"
    查看全部
    0 采集 收起 来源:[C++]虚函数

    2018-03-22

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

    2017-09-02

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

    2017-09-02

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

    2017-09-02

  • 如果父类中的calcArea为虚函数(其虚函数表为0xCCFF),且子类没有这个函数,则子类的虚函数表(0x6688)中calcArea指向父类的calcArea地址(0x3355);若子类有calcArea,则其虚函数表(0x6688)指向自己的calcArea(0x4B2C)
    查看全部
  • 虚函数表指针指向虚函数表
    查看全部
  • 在写析构函数的时候,最好是在析构函数的前面加上一个virtual的关键字,因为我们不知道在以后继承的时候子类会不会在析构函数中进行销毁指针和释放内存的操作,在父类的析构函数前面加上virtual可以使子类的析构函数被调用,防止内存泄漏
    查看全部
  • virtual关键字使用的限制: 1.不能使用普通的函数,只能是类的成员函数 2.不能使用于静态成员函数 3.不能使用于构造函数 4.不能适用于内联函数
    查看全部
  • virtual关键字使用的限制: 1.不能使用普通的函数,只能是类的成员函数 2.不能使用于静态成员函数 3.不能使用于构造函数 4.不能适用于内联函数
    查看全部
  • 动态多态有产生内存泄漏的隐患,此时释放的是父类的内存空间,子类的析构函数并未执行
    查看全部
  • 使用父类指针指向子类对象时,如果一个集合里又有三角形又有矩形又有圆形,但是每个类里面都有一个单独的计算面积的成员函数,采用虚函数的方式,可以确保找到正确的计算面积的成员函数。
    查看全部
    0 采集 收起 来源:[C++]虚函数

    2017-09-01

  • /** * 定义函数division * 参数整型dividend、整型divisor */ int division(int dividend, int divisor) { if(0 == divisor) { // 抛出异常,字符串“除数不能为0” throw string("除数不能为0"); } else { return dividend / divisor; } } int main(void) { int d1 = 0; int d2 = 0; int r = 0; cin >> d1; cin >> d2; // 使用try...catch...捕获异常 try{ division(d1,d2); } catch(string str){ cout<<str<<endl; } return 0; }
    查看全部
    0 采集 收起 来源:巩固练习

    2018-03-22

  • /** * 定义射击类:CanShut * 定义纯虚函数:aim、reload */ class CanShut { public: virtual void aim()=0; virtual void reload()=0; }; /** * 定义枪类:Gun * 公有继承射击类 * 实现成员函数:aim、reload */ class Gun : public CanShut { public: virtual void aim() { cout << "Gun -- aim" << endl; } virtual void reload() { cout << "Gun -- reload" << endl; } }; /** * 定义含参函数射击:hunting * 调用参数的aim与reload函数 */ void hunting(CanShut*s) { s->aim(); s->reload(); } int main(void) { // 实例化枪对象 CanShut *p=new Gun(); // 调用含参函数hunting,将对象枪传入函数中 hunting(p); // 释放内存 delete p; p=NULL; return 0; }
    查看全部
    0 采集 收起 来源:巩固练习

    2018-03-22

  • */ class Animal { public: // 默认构造函数 Animal(){}; // 含参构造函数 Animal(string name){m_strName = name; cout << "Animal" << endl;} // 虚析构函数 virtual ~Animal(){cout << "~Animal" << endl;} // 虚成员函数 virtual void eat(){cout << "Animal--" << m_strName << "-- eat" << endl;} // 纯虚函数 virtual void move()=0; public: // 数据成员 string m_strName; }; /** * 定义狗类:Dog * 公有继承动物类 * 虚成员函数:eat()、move() */ class Dog : public Animal{ public: // 默认构造函数 Dog(){}; // 含参构造函数 Dog(string name){m_strName = name; cout << "Dog" << endl;} // 虚析构函数 virtual ~Dog(){cout << "~Dog" << endl;} // 虚成员函数eat() virtual void eat(){cout << "Dog--" << m_strName << " -- eat" << endl;} // 虚成员函数move() virtual void move(){cout << "Dog--" << m_strName << " -- move" << endl;} public: // 数据成员 string m_strName; }; int main(void) { // 通过动物类实例化狗类 Animal *p=new Dog("狗类"); // 调用成员函数 p->eat(); p->move(); // 释放内存 delete p; p=NULL; return 0; }
    查看全部
    0 采集 收起 来源:单元练习

    2018-03-22

  • 默认Exception类型
    查看全部

举报

0/150
提交
取消
课程须知
本课程是C++初级课程 1、熟练掌握C++语言基础语法
老师告诉你能学到什么?
1、虚函数、虚析构函数、纯虚函数 2、抽象类和接口类 3、运行时类别异常 4、异常处理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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