C++ 抽象类二(抽象类的基本语法)

//抽象类的基本语法
#include<iostream>
using namespace std;

/*
有关多继承的说明
被实际开发经验抛弃的多继承
工程开发中真正意义上的多继承是几乎不被使用的
多重继承带来的代码复杂性远多于其带来的便利
多重继承对代码维护性上的影响是灾难性的
在设计方法上,任何多继承都可以用单继承代替

绝大多数面向对象语言都不支持多继承
绝大多数面向对象语言都支持接口的概念
C++中没有接口的概念
C++中可以使用纯虚函数实现接口
接口类中只有函数原型定义,没有任何数据的定义。

总结:C++中的模拟接口类定义3大条件
      1.只有public访问权限(因为必须要求子类重写父类纯虚函数)
      2.只能定义函数原型,不提供实现
      3.不能定义任何成员属性

      C++中的模拟接口类特点
      1.不可以定义接口类对象
      2.可以定义接口类的指针和引用
      3.接口类中必须是纯虚函数,不能是虚函数

      纯虚函数与虚函数的区别
      纯虚函数:virtual void Print() = 0;
      虚函数:virtual void Print(){cout<<"我是普通的虚函数"<<endl;}
      纯虚函数没有函数实现,虚函数有函数实现

实际工程经验证明
多重继承接口不会带来二义性和复杂性等问题
多重继承可以通过精心设计用单继承和接口来代替
接口类只是一个功能说明,而不是功能实现。
子类需要根据功能说明定义功能实现。

*/

class Point{
public:
    virtual void Print() = 0;
};

class PointA:public Point{
    virtual void Print(){
        cout << "我是子类  我重写了父类的纯虚函数" << endl;
    }
};

void ProtectB(){
    //Point p1;   报错  error C2259 : “Point” : 不能实例化抽象类
    Point *p1 = NULL;
    PointA pa;
    p1 = &pa;
    //产生多态
    p1->Print();
}

void main(){
    ProtectB();
    system("pause");
}
时间: 2024-08-30 14:52:33

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

【转+分析】JAVA: 为什么要使用&quot;抽象类&quot;? 使用&quot;抽象类&quot;有什么好处?

老是在想为什么要引用抽象类,一般类不就够用了吗.一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊. 看了下面的文章,明白了一点. 其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写.当然你也可以把抽象类都写成非抽象类,但是这样没有必要. 而写成抽象类,这样别人看到你的代码,或你看到别人的代码,你就会注意抽象方法,而知道这个方法是在子类中实现的,所以,有个提示作用. =========

JVM(二):Java中的语法糖

JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.

抽象类及抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 如形状类是抽象的类,圆.三角形等是具体类.用abstract修饰的类就是抽象类. 如果某个类中包含有抽象方法,那么该类就必须定义成抽象类.但是抽象类中不一定有抽象方法. 如果子类继承抽象类,那么必须在子类中实现抽象类中的抽象方法. 使用关键字abstract定义抽象类,一般语法: [访问权限]                 abstract                   class 类名            {

二、java基本语法

一.标识符 java对各种变量.方法和类等要素命名时使用的字符序列成为标识符:通俗点,凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则 1.标识符命名规则: 1)标识符由字符.下划线.美元符或数字组成. 2)标识符应以字符.下划线.美元符开头 3)java标识符大小写敏感,长度无限制 4)约定俗成,java标识符选取应该注意“见名知意”且不能与java语言的关键字(eclipes中带颜色的基本都是关键字)重名 合法的标识符 不合法的标识符 HelloWord class DataClass

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

1 //抽象类示例: 2 abstract class Shape1 3 { 4 { 5 System.out.println("执行Shape的初始化块..."); 6 } 7 private String color; 8 //定义一个计算周长的抽象方法, 9 public abstract double calPerimeter(); 10 //定义一个返回形状的抽象方法, 11 public abstract String getType(); 12 //定义Shape的构造器

Java 学习整理笔记(二)Java基本语法结构

一.源文件的编写 Java是完全面向对象的语言,所以Java的所有操作都是基于类(class)完成的.Java中所有程序的代码都需要放在一个类中,类用关键字class声明,在class之前可以添加一些修饰符,Java应用程序的源文件由若干个书写形式相互独立的类组成. 1.例子: // HelloDate.java import java.util.Date; //引入 java.util 包中的Date类 public class HelloDate{ /* * 该程序的目的是:输出当前系统的时

scala函数式编程(二) scala基础语法介绍

上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些java或者python的基础,毕竟大部分人不会将scala当作第一门学习编程的语言. 不过这些语法知识记不住也没关系,本身语法这种东西就应该在使用中被记住.这里写这篇的目的也只是梳理一遍,方便大家对语法有个初步的印象,后面可以随时查询. PS:所使用的版本是scala 2.11.8,那我们开始吧 一.

Java基础学习笔记二十三 Java核心语法之反射

类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 链接指的是将Java类的二进制代码合并到JVM的运行状态之中的过程.在链接之前,这个类必须被成功加载.类的链接包括验证.准备和解析等几个步骤. 验证:是否有正确的内部结构,并和其他类协调一致. 准备:负责为类的静态成员分配内存,并设置默认初始化值 解析:

搞定linux上MySQL编程(二):MySQL语法基础操作

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] sql(structured query language)是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统. sql语言包含3部分: 1. 数据定义语言(DDL),用于定义和管理对象,例如数据库.数据表以及试图等.例如create.drop.alter等语句. 2. 数据操作语言(DML),用于操作数据库中数据,例如select. insert