第十五章——抽象类,切片,多继承
来源:互联网 发布:s3c2410数据手册 编辑:程序博客网 时间:2024/06/01 10:46
//可以使用抽象类的指针或引用。抽象类里的纯虚函数可以是有函数体。任何情况下都不能得到抽象类的对象,抽象类和普通类的区别是,抽象类不能实例化
//牢记实现虚机制的要求virtual
#include <iostream>using namespace std;class Pet {//抽象类public: static int i;///////////////////////抽象类的数据 virtual void speak() = 0;///纯虚函数也可以有函数体 virtual void eat() = 0; virtual void kkk();////////////////非纯虚函数};int Pet::i=1;void Pet::speak() { cout << "Pet::speak()" <<i++<< endl;}void Pet::eat() { cout << "Pet::eat()" <<i++<< endl;}void Pet::kkk() { cout << "kkk()" <<i++<< endl;}class Dog : public Pet {public: void speak() { Pet::speak();}//重定义纯虚函数 void eat() { Pet::eat(); }////这貌似是自身重定义};void main() { Dog simba; Pet *pt=&simba;//指针 pt->speak(); pt->eat(); pt->kkk();///调用基类的非纯虚函数 cout<<endl; Dog &wt=simba;//引用 wt.speak(); wt.eat(); wt.kkk();///调用基类的非纯虚函数 cout<<endl; //Pet a=simba;这句是编译不过的,因为父类是抽象类,不允许“切片”得到抽象类的对象}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
切片void main() {
B wo;
A ni=wo;
}如果对一个对象进行向上类型转换,而不使用地址或引用,这个对象被“切片”,只剩下来的是适合于目的的子对象。(不提倡使用)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
多继承的易错点
#include <iostream>using namespace std;class a{public:virtual void kk(){}//虚函数是有函数体的};class P : public a{public:virtual void kk(){cout<<"pppppp";}};class M : public a{public:virtual void kk(){cout<<"mmmmmm";}};class Child : public P,public M{//去掉其中一个才能通过编译public:};void main() { a *pt=new Child();//: error C2594: “初始化”: 从“Child *”到“a *”的转换不明确 pt->kk();} ///:~
//如果在一个子类继承的多个父类中拥有相同函数,子类中没有覆盖该函数,那么调用该函数时将产生歧义
///如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量.
- 第十五章——抽象类,切片,多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- 黑马程序员—继承,抽象类
- 深入继承——抽象类和接口
- 黑马程序员——继承,抽象类,接口概述
- 深入继承——抽象类和接口
- 黑马程序员——多态,继承;抽象类
- 黑马程序员——继承、final关键字、抽象类
- 【编程基础】——抽象类&&接口&&继承
- Java基础——继承接口抽象类
- 黑马程序员——继承、抽象类、接口、多态
- 黑马程序员——继承和抽象类
- Qt Widgets——抽象按钮及其继承类
- 深入继承——抽象类和接口
- Java基础——接口的继承与抽象类
- Android 设置无标题栏(全屏)的两种方式
- How to make item view render rich (html) text in Qt
- Gearman分布式任务处理系统(六)跨多种环境部署
- JQuery validate ajax 表单验证方法。
- [Android实例] android实现顶级圆角弹窗(个人)
- 第十五章——抽象类,切片,多继承
- C++中float和double
- [LeetCode] Partition List
- Android平台Bitmap缓存为文件
- Reporting Service2008 匿名访问报表服务器2008配置
- Python 元组、列表、字典、文件
- 174977-2接插件及配套
- 高德地图中根据两点实现旋转图片的方法
- JAVA文件字节单位转换