为了账号安全,请及时绑定邮箱和手机立即绑定
  • 定义一个动物(animal)类,要求含有虚函数eat和move,并定义构造函数和虚析构函数 定义一个狗(Dog)类,要求共有继承动物类,定义构造函数和虚析构函数,并实现自己的eat和move函数 使用父类对象实例化子类,调用子类成员函数
    查看全部
    0 采集 收起 来源:巩固练习

    2016-10-27

  • 1)C++中的多态是通过虚函数表来实现的 (2)每一个类都有自己的虚函数表,该类的所有对象共用该虚函数表,来调用相应的虚函数 (3)对象的大小,一般就是指数据成员的大小,如果一个对象没有数据成员,但是为了表明此对象的存在,在C++中也会给此对象一个字节的大小,用于标明此对象的存在,类是抽象的,但是对象却是真实存在的。 (4)虚函数表在对象中占用了前面的4个内存单元,即占用了4个字节,后面的内存单元才是存储对象的数据成员的大小
    查看全部
    0 采集 收起 来源:练习题

    2016-10-27

  • 虚函数表指针占据的是每个对象的前四个内存单元 有虚函数时,对象中首先存虚函数表指针,再存数据成员地址,没有虚函数时,首先存的是数据成员的地址。<br> 有虚函数时,先使用指针 p 指向对象,访问的虚函数表指针,(*p)取得的是虚函数表地址,再使 p++ 就指向了数据成员,(*p)就能取得数据成员的值。
    查看全部
  • 对象的大小:指的是数据对象所占内存的大小,不包括成员函数 虚函数表的指针在有虚函数的时候并且实例化对象的时候,这个对象的第一块内存当中所存储的是一个指针,就是虚函数表的指针 某类中一个对象成员都没有的时候,这个类也是可以实例化的,实例化之后,作为一个对象来说,级必须标明自己的存在,C++用一个内存单元去标记它,即为这个内存单元只标记了这个对象的存在。如果有数据成员,能够标记自己的存在,就不需要额外的内存单元去标记
    查看全部
  • 关于多态的理解: 当父类有虚函数时,编译系统会自动为该类配一个虚函数表,并将类中虚函数的地址写入这个表中,表的位置由类中隐含的虚函数表指针给出,而且其每个实例化的对象均会共享这个表。其子类会继承该虚函数表,当然,子类的虚函数表的指针是重新赋予的,与父类的不同。在子类的虚函数表中,继承了父类的虚函数地址,也有子类自己的虚函数地址。此时子类中若是出现了与虚函数列表中父类函数同名的函数,则该子类函数会替换掉对应的父类函数。此时再通过父类指针调用同名函数时,就会调用到子类的函数。 这里有一点要注意到:虚函数只是将自己的地址复制到虚函数表中而已,其它则与别的成员函数并无二异。也就是说,虚函数有两个入口。而调用虚函数默认先从虚函数表中调用。所以这就说明了为什么父类指针可以调用到同名的子类函数:因为虚函数表中原来的父类函数地址被子类函数覆盖掉了。当然,同名的另一个父类函数还是存在的,只不过虚函数表中没有它的地址而已。可以通过另一个入口调用。
    查看全部
  • #include <iostream> #include <string> #include <stdlib.h> using namespace std; /** * 定义函数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 { r = division(d1, d2); cout<<r<<endl; } catch(string &str) { cout<<str<<endl; } return 0; }
    查看全部
    0 采集 收起 来源:巩固练习

    2018-03-22

  • 含有纯虚函数的类叫抽象类,抽象类无法实例化对象。对于抽象类的子类,只有把子类中的所有纯虚函数进行实现,才能进行实例化
    查看全部
  • 一个指针占据4个基本内存单元
    查看全部
  • 类中有指针,类的构造函数中用newz申请了内存,在主函数中若实例化父类,将会造成内存泄漏
    查看全部
  • 关键词virtual不能修饰构造函数,静态函数,内联函数,普通函数(必须是类中的成员函数)
    查看全部
  • 多态的定义:指相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。
    查看全部
    0 采集 收起 来源:[C++]虚函数

    2016-10-25

  • 只有虚析构函数,没有虚析构函数 虚函数使用virtual关键字定义,但使用virtual关键字时,并非全部是虚函数 虚函数特性可以被继承,当子类中定义的函数与父类中虚函数的声明相同时,该函数也是虚函数 virtual关键字使用是有限制的: 1.不能用在构造函数前 2.不能用在一般普通函数前 3.不能用在静态成员函数前,即用static修饰 4.不能用在内联函数前,即用inline修饰
    查看全部
    0 采集 收起 来源:练习题

    2016-10-24

  • 你好,父类引用子类对象有很多好处,我举个这样一个例子 像你上面这个person有子类men对吧,我们再来个子类women。 于是你要写了一个数组,所有person的数组,就可以容纳men和women了。 也就是person[] a=new person[]{new men("小明"),new women("小红")}; 这其实就是一个父类引用指向子类对象。 如果你用子类数组想包括各种子类对象,就办不到了对吧 ------------------------------------------------------------------------------------------- 另外,子类之所以是子类,必然有跟父类不一样的属性或者方法,如果用父类都能完成的,何必还要再继承出个一模一样的子类呢对吧
    查看全部
  • 多态中存在的问题:内存泄漏<br> 为了解决内存泄漏的问题,引入了虚析构函数,虚析构函数就是用virtual修饰析构函数 virtual在函数中的使用限制:不能修饰普通函数,即该函数必须为某个类的成员函数;不能修饰全局函数;不能修饰静态成员函数;不能修饰内联函数,否则会使内联函数变成虚函数;不能修饰构造函数
    查看全部
  • Flyable *p=new Bird(); typeid(p)与typeid(*p)
    查看全部

举报

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

微信扫码,参与3人拼团

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

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