网站域名使用费,衡阳市住房和城乡建设部网站,营销型网站建设 高校邦,山东中佛龙建设有限公司网站目录 《C基础语法总结》《C面向对象语法总结(一#xff09;》
十一、继承
继承#xff0c;可以让子类拥有父类的多有成员#xff08;变量、函数#xff09;如下面的代码#xff1a;Student是子类#xff08;subclass,派生类#xff09;#xff0c;Person是父类…目录 《C基础语法总结》《C面向对象语法总结(一》
十一、继承
继承可以让子类拥有父类的多有成员变量、函数如下面的代码Student是子类subclass,派生类Person是父类superclass超类 对象的内存布局父类的成员变量在前子类的成员变量在后 成员访问权限 成员访问权限、继承方式有3种 public公共的任何地方都可以访问struct默认protected子类内部、当前类内部可以访问private私有的又有当前类内部可以访问class默认 子类内部访问父类成员的权限是以下2项种权限最小的那个 成员本身的访问权限上一级父类的继承方式 开发中用的最多的继承方式是public这样能保留父类原来的成员访问权限访问权限不影响对象的内存布局
十二、初始化列表 特点 一种便捷的初始化成员变量的方式就是在构造函数括号后面用隔开初始化成员变量只能用在构造函数中初始化顺序只跟成员变量的声明顺序有关和赋值顺序无关 下面两种写法是等价的 正常在函数中初始化变量 用初始化列表初始化变量 初始化列表中可以调用函数 初始化列表和默认参数配合使用 如果函数声明和实现是分离的 初始化列表只能写在函数的实现中默认参数只能写在函数的声明中
十三、构造函数的相互调用
子类调用父类的构造函数需要在初始化列表中调用 子类的构造函数默认会调用父类的无参构造函数如果子类的构造函数显式调用了父类的有参构造函数就不会再去默认调用父类的无参构造函数如果父类缺少无参构造函数且父类有有参的构造函数子类的构造函数必须显式调用父类的有参构造函数继承体系下的构造函数示例
十四、构造、析构顺序
父类构造函数 》子类构造函数 》 子类析构函数 》父类析构函数
十五、多态
父类指针和子类指针 父类指针可以指向子类指针是安全的开发中经常用到继承方式必须是public子类指针指向父类指针是不安全的 默认情况下编译器智慧根据指针类型调用对应的函数不存在多态如果需要有多态特性父类的函数需要声明为虚函数virtual修饰的函数多态是面向对象非常重要的一个特性 同一操作作用于不同的对象可以有不同的解释产生不同的执行结果在运行中可以识别出真正的对象类型调用对应子类中的函数 多态的要素 子类重写父类的成员函数override父类指针指向子类对象利用父类指针调用重写的成员函数
十六、虚函数
C中的多态通过虚函数virtual function来实现虚函数被virtual修饰的成员函数只要在弗雷中声明为虚函数子类中重写的虚函数也自动变成虚函数也就是说子类中可以省略virtual关键字
十七、虚表 虚函数的实现原理是虚表这个虚表里面存储着最终需要调用的虚函数的地址这个虚表也叫做虚函数表 虚表的地址在对象内存的最前面在虚表中已经确定了该对象要使用的虚函数的地址 所有的对象不管是全局区栈、堆共用一份虚表因为虚表中存的是函数地址函数是代码在程序运行中只有一份 虚表的内存地址图x86的32位环境 虚表的汇编分析
十八、多态中子类调用父类的成员函数
子类重写了父类的函数如果需要显式调用父类的函数需要显式制定父类的类名和函数名
十九、虚析构函数
如果存在父类指针指向子类对象的情况应该将析构函数声明为虚函数虚析构函数delete父类指针时只有将父类析构函数声明为虚析构函数才会调用子类的析构函数这样才能保证析构的完整性
二十、纯虚函数
纯虚函数没有函数体且初始化为0的虚函数用来定义接口规范 抽象类Abstract class 含有纯虚函数的类不可以实例化不可以创建对象抽象类也可以包含非纯虚函数、成员变量如果父类是抽象类子类没有完全重写纯虚函数那么子类依然是抽象类 后记 个人总结欢迎转载、评论、批评指正