1. //抽象类的基本语法
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. /*
  6. 有关多继承的说明
  7. 被实际开发经验抛弃的多继承
  8. 工程开发中真正意义上的多继承是几乎不被使用的
  9. 多重继承带来的代码复杂性远多于其带来的便利
  10. 多重继承对代码维护性上的影响是灾难性的
  11. 在设计方法上,任何多继承都可以用单继承代替
  12.  
  13. 绝大多数面向对象语言都不支持多继承
  14. 绝大多数面向对象语言都支持接口的概念
  15. C++中没有接口的概念
  16. C++中可以使用纯虚函数实现接口
  17. 接口类中只有函数原型定义,没有任何数据的定义。
  18.  
  19. 总结:C++中的模拟接口类定义3大条件
  20. 1.只有public访问权限(因为必须要求子类重写父类纯虚函数)
  21. 2.只能定义函数原型,不提供实现
  22. 3.不能定义任何成员属性
  23.  
  24. C++中的模拟接口类特点
  25. 1.不可以定义接口类对象
  26. 2.可以定义接口类的指针和引用
  27. 3.接口类中必须是纯虚函数,不能是虚函数
  28.  
  29. 纯虚函数与虚函数的区别
  30. 纯虚函数:virtual void Print() = 0;
  31. 虚函数:virtual void Print(){cout<<"我是普通的虚函数"<<endl;}
  32. 纯虚函数没有函数实现,虚函数有函数实现
  33.  
  34. 实际工程经验证明
  35. 多重继承接口不会带来二义性和复杂性等问题
  36. 多重继承可以通过精心设计用单继承和接口来代替
  37. 接口类只是一个功能说明,而不是功能实现。
  38. 子类需要根据功能说明定义功能实现。
  39.  
  40. */
  41.  
  42. class Point{
  43. public:
  44. virtual void Print() = ;
  45. };
  46.  
  47. class PointA:public Point{
  48. virtual void Print(){
  49. cout << "我是子类 我重写了父类的纯虚函数" << endl;
  50. }
  51. };
  52.  
  53. void ProtectB(){
  54. //Point p1; 报错 error C2259 : “Point” : 不能实例化抽象类
  55. Point *p1 = NULL;
  56. PointA pa;
  57. p1 = &pa;
  58. //产生多态
  59. p1->Print();
  60. }
  61.  
  62. void main(){
  63. ProtectB();
  64. system("pause");
  65. }

C++ 抽象类二(抽象类的基本语法)的更多相关文章

  1. PHP 面向对象:抽象类继承抽象类

    抽象类继承另外一个抽象类时,不用重写其中的抽象方法.抽象类中,不能重写抽象父类的抽象方法.这样的用法,可以理解为对抽象类的扩展. 下面的例子,演示了一个抽象类继承自另外一个抽象类时,不需要重写其中的抽 ...

  2. 【转+分析】JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?

    老是在想为什么要引用抽象类,一般类不就够用了吗.一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊. 看了下面的文章,明白了一点. 其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确 ...

  3. PHP面向对象之旅:抽象类继承抽象类(转)

    可以理解为对抽象类的扩展 抽象类继承另外一个抽象类时,不用重写其中的抽象方法.抽象类中,不能重写抽象父类的抽象方法.这样的用法,可以理解为对抽象类的扩展. 下面的例子,演示了一个抽象类继承自另外一个抽 ...

  4. 二. Python基础(2)--语法

    二. Python基础(2)--语法 1.实现一个简单的登录系统 '''# 形式1 n = 1 while n < 4:     name = input("请输入姓名\n" ...

  5. 一、 JSP概述 二、JSP的语法结构 三、JSP内置对象

    一.JSP概述###<1>概念 java服务器页面 可以编写动态页面 其内部是以HTML标签为主,可以在HTML标签嵌套java代码 jsp文件以.jsp为后缀 jsp本质上就是一个Ser ...

  6. JVM(二):Java中的语法糖

    JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...

  7. JavaWeb从0开始学(二)-----JSP基本语法与编译指令

    在上一节中我们学习了如何搭建一个简单的Web应用,并且已经知晓了一个JSP页面主要由静态的HTML内容和动态的Java脚本共同组成.JSP的基本语法共有JSP注释.JSP声明.输出JSP表达式与JSP ...

  8. final关键字、抽象类、抽象类和接口的区别

    1.final关键字 1.1.final修饰的类无法继承. 1.2.final修饰的方法无法覆盖. 1.3.final修饰的变量只能赋一次值. 1.4.final修饰的引用一旦指向某个对象,则不能再重 ...

  9. 《Java中的抽象类及抽象类的作用》

    //抽象类示例: abstract class Shape1 { { System.out.println("执行Shape的初始化块..."); } private String ...

随机推荐

  1. ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value:

    今天碰到一个相当棘手的问题,那就是ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value . 本来在本地测试是没有任 ...

  2. url 传值

    js获取url参数值: index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数 根据获取h ...

  3. java String->float,float->int

    类型转换代码 : String sourceStr = "0.0"; String类型 float sourceF = Float.valueOf(sourceStr); floa ...

  4. 【DB2】NVL2函数

    语法: NVL2(表达式1,表达式2,表达式3) 如果表达式1为空,返回值为表达式3的值.如果表达式1不为空,返回值为表达式2的值. 例子: SELECT ID, NVL2(SEX,'非空','空值' ...

  5. H5 Canvas | 画布中变量作用域与setInterval方法同步执行探究

    Demo - 随机绘制圆环 实现思路: 将一个圆环的绘制分成100份,setInterval()方法定义每隔时间n绘制一段新的,每份的开始路径都是上一次的结束路径,实现步进绘制. 通过Math.ran ...

  6. java的日期格式使用

    转自:  关于java中六个时间类的使用和区别     java.util.Date java.sql.Date  java.sql.Time  java.sql.Timestamp java.tex ...

  7. CGGeometry Reference

    CGRectUnionCGRectUnion接受两个CGRect结构体作为参数并且返回一个能够包含这两个矩形的最小矩形.听起来可能没什么,我相信你也可以用几行代码轻松实现这个功能,不过 CGGeome ...

  8. 网络中常见的ping命令协议

    ICMP是"Internet Control Message Ptotocol"(Internet控制消息协议)的缩写.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之 ...

  9. DS18B20 crc 算法

    http://blog.csdn.net/pengrui18/article/details/24740973 https://www.maximintegrated.com/cn/app-notes ...

  10. SQL数据库相关

    数据库相关知识点 SQL, 对表的理解, 对表的主键, 外键的理解, 视图, 为什么要有视图, 视图有什么功能, 视图与表有什么区别 主键是唯一标识的一条记录,不能重复,不能为空. 表的外键是另一个表 ...