什么是面象对象呢???
面向过程的方法虽符合软件工程中模块化及自顶向下逐步求精的方法,但面对代码庞大时,难以理解,扩充、查错和复用。
面向对象方法使分析、设计和实现一个系统的方法尽可能地接近人们认识一个系统的方法,包括3个方面,面向对象的分析、面向对象的设计如:UML设计和面向对象的程序设计。
什么是面向对象技术??
把问题看成是对象的集合。对象=数据(属性)+函数(行为)。类是对象的一个抽象。
面向对象程序设计四个基本特点??
抽象:概括同一类事物共同特点,这个过程就是抽象
封装:对象的属性和操作结合成一个独立的单元。
继承:以现有类为基础派生新类,达到代码扩充和复用
多态:不同的对象可调用相同名称的函数(参数不同),导致不同的行为。
什么是类??
具有相同属性和操作一组对象的集合。在c++中需要“先声明后使用”自定义数据类型。具有唯一标识符。
定义类:
class 类名{
private:私有变量和函数
public:公有变量和函数
protected:保护变量和函数
};
说明
- private,完全私有,只有本类内可以访问,派生类和外部都不可访问
- protected,只有本类内和派生类可以访问,外部不能访问
- public,内外部都能访问
- 如无访问权限关键字,则默认声明为private
- 不能在类声明中对数据变量进行初始化
- 类声明中可以给出成员函数的参数的默认值
- 类中声明的成员不能使用extern、auto和register关键字修饰(存储类型修饰符)
- 可以不包含任何成员变量和函数,空类
定义成员函数(类体外定义):
返回值类型 类名::成员函数名(形参列表){函数体}
说明: - ::称作所属,作用域运算符,用于表示其后的成员函数属于某个特定的类。类在前,域运算符,成员函数在后
- 类中定义的成员函数允许重载
- 可使用inline将成员函数定义为内联函数(调用该函数时,编译程序自动转换为函数体,可以提高效率,适用于语句少,频繁调用的场景)
- 在声明时,类体内给出成员函数的定义,就默认为内联函数。
完整的C++程序结构??
- 只有一个主函数
- 用户可定义任意多个类及全局函数
- 全局说明,在所有的函数和类之外定义的变量或函数
- 注释
- 头文件
注:成员变量,一般定义为私有访问权限。类外需要通过访问本类函数来访问私有变量。
从逻辑上看,c++程序结构
- 类的定义
- 类中成员函数的实现
- main函数
对象声明
声明普通对象:
类名 对象名
类名 对象名(参数);//定义类对象的同时初始化
类名 对象名=类名(参数);//用另一个类对象进行初始化
也可以是指针的形式:
类名 *对象指针名= new 类名;
类名 *对象指针名= new 类名();
类名 *对象指针名= new 类名(参数);
声明对象引用:
类名 &对象引用名=对象;
声明对象的指针:
类名 *对象指针名=对象地址;
声明对象的数组:
类名 对象数组名[数组大小];
类的访问范围??考点
相关软考已经做了很好的总结了:面向对象的技术
public:公有的,可以在程序的任何地方被访问。
private:私有的,仅能在本类内被访问
protected:保护,能在本类及子类中被访问
标识符的作用域和可见性??
作用域包括:函数原型作用域、局部作用域、类作用域、命名空间作用域
函数原型作用域,声明函数原型时形参的作用范围,是C++中最小的作用域
局部作用域,使用大括号括起来的一段程序和变量。
类作用域:类内可直接使用,类外通过.或::或指针形式 ->访问
命名空间的作用域:消除各大模块之间同名引起歧义。
namespace 命名空间名
{
命名空间内的各种声明(函数声明、类声明 ...
}
命名空间内部可直接引用当前命名空间中声明的标识符,需要引用其他命名空间的标识符,使用以下形式:命名空间::标识符名
两种using语句访问:
using 命名空间名::标识符名
using namespace 命名空间名;//使用该语句后,可以在当前作用域中直接引用该命名空间内的任何标识符。
c++复习下一篇c++复习之类和对象进阶