发表时间:2022-03-25来源:网络
如果你觉得C++还不够复杂,那你知道protected abstract virtual base pur virtual private destructor inheritance是什么意思吗?你上次用到它又是什么时候呢?
-----Tom Cargill,C++ Journal 1990年秋
C++在软件的复用性方面或许可以比以前的语言取得更大的成功。因为C++的继承的风格基于对象,即允许数据的继承,也允许代码的继承。
1985年以前,C++的名字是“C with classes”,但是现在人们已经在其中加入了非常非常多的特性,从当时的角度类看,“C with classes”是C语言的一个相当合理的扩展,很容易理解和解释。随即,人们对这种语言投入了极大的热情,至今未曾衰减。现在的C++是一个相当庞大的语言。具体地说,一个C编译器的前端大约有40000行代码左右,而一个C++编译器的前端的代码可能是它的两倍,甚至更多。
这一节主要是对C++语言特性和一些概念的概括总结,本来不打算写了,因为具体的细节问题我在[C++ PP(Edit 6)]中也有具体的解释,可能大部分有重复,但是为了小结和复习,回顾一下C++语言与C语言的区别和一些新的特性及其相关概念,决定还是写下来,高手略过。
面向对象编程的特点是封装、继承和多态(动态绑定)。C++通过类的派生支持继承,通过虚拟函数支持动态绑定。虚拟函数提供了一种封装类体系实现细节的方法。
一、全面认识C++概念及注意的知识点:
(1)抽象(Abstruct):它是一个去除对象中不重要的细节的过程,只有那些描述了那些对象本质特征的关键点才被保留。抽象是一种设计活动,其他的概念都是提供抽象的OOP(Object-oriented paradigm)特性。
抽象的概念就是观察一群事物,并认识到他们具有共同的主题。你可以忽略不重要的区别,只记录能表现事物特性的关键数据。当你这样做的时候,就是在进行抽象,所存储的数据类型就是“抽象数据类型”。抽象听上去像是一个艰深的数学概念,但不要被它糊弄--它只不过是对事物的简化而已。
在软件中,抽象是十分有用的,它允许程序员实现下列目标:
(1)隐藏不相关的细节,把注意力集中在本质特征上。
(2)向外部世界提供一个“黑盒子接口”,接口确定了施加在对象之上的有效操作集合,但它并不提示对象在内部是怎样实现他们的。
(3)把一个复杂的系统分解成几个相互独立的组成部分。这可以做到分工明确,避免组件之间不符合规则的相互作用。
(4)重用和代码共享。
抽象建立了一种抽象数据类型,C++使用l类(class)这个特性来实现它。
(2)类:就是用户定义类型加上对该类型进行操作。
类是一种用户定义的类型,就好像是int这样的内置类型一样。内置类型已经有了一套完善的针对它的操作(如算术运算)等,类机制也必须允许程序员规定他所定义的类能够进行的操作。类里面的任何东西被称为类的成员。一个空类有:构造函数,析构函数,拷贝构造函数,赋值操作符operator=四个成员函数。下面会分别介绍。
C++的类机制实现了OOP的封装要求,类就是封装的软件实现。类也是一种类型,就像是char,int,double和struct st*一样。因此在使用之前必须要声明类的变量,类和类型一样,你可以对它进行很多操作,如取得它的大小或声明它的变量等。对象和变量一样,可以对它进行很多操作,如取得它的地址、把它作为参数传递、把它作为函数的返回值、使它成为常量值等。
(3)对象(Object):某个类的一个特定变量,就像j可能是int类型的一个变量一样。对象也可以被称作类的实例(instance)。
(4)封装(encapsulation):把类型、数据和函数组合在一起,组成一个类。在C语言中,头文件就是一个非常脆弱的封装的实例。它之所以是一个微不足道的封装例子,是因为它的组合形式是纯词法意义上的,编译器并不知道头文件是一个语义单位。
(5)单继承(ingheritance):这是一个很大的概念--允许类从一个更简单的基类中接收数据结构和函数。派生类获得基类的数据和操作,并可以根据需要对它们进行改写,也可以在派生类中增加新的数据和函数成员。在C语言里不存在继承的概念,没有任何东西可以模拟这个特性。当一个类沿用或定制它的唯一基类的数据结构和成员函数时,它就成了单继承。不要把在一个类内部嵌套另一个类与继承混淆。嵌套只是把一个类嵌入另一个类的内部,称内部类。
(6)多继承:多重继承允许把两个类组合成一个类,这样的 结果类对象的行为类似于这两个类的对象中的一个。
(7)虚继承:主要解决在多继承中,访问不明确的问题。虚继承中所有的子类都指向同一份数据空间。
(8)虚基类:虚继承的父类称之为虚基类,它表示积累是被多个多重继承的类所共享。(编程的时候一般避免虚继承)

(9)内部类(Inner):内部类与外部类的关系:与编译器有关,VC6.0他们是两个完全不同的类,不能用对方的东西,如果要用,可以定义为友元类;VS2005编译器,内部类可以用外部类的东西,外部类不能用内部类的东西。
内部类的构造函数运行的顺序:先调用外部类的构造函数,如果有父类则先调用父类的构造函数。然后再调用自己的构造函数。
(10)纯虚函数(pure virtual function):纯虚函数是一种特殊的虚函数,在许多情况下,基类不能对虚函数给出有意义的实现,而把它申明为纯虚函数,它的实现留给基类派生的类去做。这就是纯虚函数的作用(类似于java中的接口)。同时含有纯虚函数的类称为抽象类(至少含有一个纯虚函数),它不能生成对象。
class father
{
public:
virtual void show()=0;//纯虚函数;
}
(11)模板(template):这个特性支持参数化类型。是一种泛型技术,用不变的代码实现可变的算法。
#include
using namespace std;
template//函数模板不能给默认值;
T Min(T a,T b)
{
return a>b?b:a;
}
template
void show(T a,R b)
{
cout
上一篇:C++抽象编程——递归
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14