C++ 面向对象
C++ 类&对象
类用于指定对象的形式,它包含了数据表示法个用于处理数据的方法
类中的数据和方法称为类的成员
函数在一个类被称为类的成员
C++类定义
定义一个类,在本质上是定义一个数据类型的蓝图
类定义是以关键字class开头,后跟类的名称
类定义后必须跟着一个分号或一个声明列表
类成员函数-类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样
类访问修饰符-类成员可以被定义为public、private、或protected。默认情况下定义为private
构造函数&析构函数-类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用
C++拷贝构造函数-拷贝构造函数,是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
C++友元函数-友元函数可以访问类的private和protected成员
C++内联函数-通过内联函数,编译器视图在调用函数的地方扩展函数体中的代码
C++中this指针-每个对象都有一个特殊的指针this,它指向对象本身
C++中指向类的指针-指向类的指针方式如同指向结构的指针,实际上,类可以看成是一个带有函数的结构
C++类的静态成员-类的数据成员和函数成员都可以被声明为静态的
C++继承
面向对象程序员设计中最重要的一个概念是继承
继承允许依据一个类来定义另一个类,这使得创建和维护一个程序变得更容易,达到了重用代码和提高执行时间的效果
当创建一个类时不需要重新编写新的数据成员和成员函数,只需要指定新建的类继承了一个已有的类的成员即可,这个已有的类称为基类,新建的类称为派生类
基类&派生类
C++中的多继承,一个类可以派生自多个类,他可以从多个基类继承数据和函数
访问控制和继承
根据不同的访问权限总结出不同的访问类型:
一个派生类继承了所有的基类方法,单下列情况除外:
1-基类的构造函数、析构函数和拷贝构造函数
2-基类的重载运算符
3-基类的友元函数
继承类型
当一个类派生自基类,该基类可以被继承为public、protected或private几种类型
使用不同类型的继承时,遵循以下几个规则:
公有继承(public):当一个类派生自公有基类时,基类的公有成员、保护成员也是派生类的公有成员、保护成员,基类的私有成员不能被直接被派生类访问,可以通过调用基类的公有和保护成员来访问
保护继承(protected):当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员
私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员
多继承
多继承即一个子类可以有多个父类,它继承了多个父类的特性
C++类可以从多个类继承成员,语法如下:
C++重载运算符和重载函数
C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载
重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是他们的参数列表和定义(实现)不相同
C++中的函数重载:
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同
C++中的运算符重载
重载的运算符是带有特殊名称的函数,函数名字是由关键字operator和其后要重载的运算符符号构成的
C++ 多态
多态按字面的意思就是多种形态
当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态
虚函数
虚函数是在基类中使用关键字virtual声明的函数
在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数
纯虚函数
想要在基类中定义虚函数,以便在派生类中重新定义该函数更好的适用于对象
但又不能对虚函数给出有意义的实现,这时会用到纯虚函数
C++数据抽象
数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节
数据抽象是一种依赖于接口和实现分离的编程技术
访问标签强制抽象
使用访问标签来定义类的抽象接口。一个类可以包含零个或多个访问标签
1-使用公共标签定义的成员都可以访问改程序的所有部分。一个类型的数据抽象视图是由他的公共成员开定义的
2-使用私有标签的成员无法访问到使用类的代码。私有部分对使用类型的代码隐藏了实现细节
数据抽象的好处
1-类的内部受到保护,不会因为无意的用户级错误导致对象状态受损
2-类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码错误的错误报告。
C++数据封装
所有的C++程序都有以下两个基本要素
程序语句 :这是程序执行动作的部分,被称为函数
程序数据:数据是程序的信息,会受到程序函数的影响
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念
这样能避免受到外界的干扰和误用,从而确保了安全
数据封装引申出另一个OOP概念,即数据隐藏
数据封装是一种把数据和操作数据的函数绑定在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制
C++接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现
C++接口是使用抽象类来实现的
抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关数据分离的概念
如果类中至少有一个函数被声明为虚函数,则这个类就是抽象类
设计抽象类的目的是为了给其他类提供一个可以继承的适当的基类
抽象类不能被用于实例化对象,他只能作为接口使用
可用于实例化对象的类被称为具体类