目录
自学考试教材《C++程序设计》
作者:辛运帏,陈朔鹰
版本:2019
课程代码:04737
一,结构化程序设计
在面向对象程序设计方法出现之前,软件界广泛流行的主流设计方法之一是结构化程序设计方法,也称为面向过程的设计方法。这个时期的程序设计语言以Pascal语言和C语言为代表。基本的控制结构有3种,即顺序、选择、循环。有一个著名的公式体现了结构化程序设计的基本思想,即数据结构+算法=程序。
二,面向对象程序设计的概念和特点
1.概念
1.面向对象技术把问题看成是相互作用的事物的集合,也就是对象的集合。
2.对象具有两个特性:一是状态:二是行为。
状态是指对象本身的信息,也称为属性,在面向对象技术中,属性表现为数据,用属性值来描述对象的状态。
行为是对对象的操作,在面向对象技术中,把对对象的操作定义为函数。
3.通过对事物的抽象找出同一类对象的共同属性(静态特征)和行为(动态特征),从而得到类的概念。对象是类的一个具象,类是对象的一个抽象。
2.面向对象程序设计的特点
面向对象的程序设计有“抽象”,“封装”,“继承”,“多态”4个基本特点。
抽象:将同一类事物的共同特点概括出来。类是对现实世界中客观事物的抽象。
封装:将数据和对该数据进行合法操作的函数“捆绑”在一起作为一个类的定义的过程。特点是将对象的属性及实现细节隐藏起来,只给出如何使用的信息。
继承:在现有类的基础上声明新的类,将已有类中的数据和函数保留,加上自己特殊的数据和函数,构成一个新类。
多态:指不同种类的对象都具有名称相同的行为(函数),而具体行为的实现方式却有所不同。多态性起源于一个希腊单词,意思是“许多形态”。
三,类的初识
一个类的示例:
class student
{
private:
string name;
int age;
public:
student(string, int);
string GetName();
int GetAge();
void SetName(string _name)
{
name = _name;
}
void SetAge(int _age)
{
age = _age;
}
};
student::student(string _name,int _age)
{
name = _name;
age = _age;
}
string student::GetName()
{
return name;
}
int student::GetAge()
{
return age;
}
关于类的示例的总结:
1.访问范围说明符有public
,private
,protected
,使用时需要在访问范围说明符后加:
。
2.类的成员函数可以在类的内部声明,在类的外部定义,也可以在类的内部声明并定义。在类的内部声明成员函数,在类的外部定义成员函数时,系统将其视为内联函数,格式为:返回值类型 类名 :: 成员函数名()
,其中::
为类作用域运算符。
四,类的示例程序剖析
创建类对象或数组的基本形式:
//创建普通类对象
student a;
//创建普通类对象,创建时,调用有参构造函数
student b("ZhangSan", 1);
//创建普通类对象,创建时,调用有参构造函数
student c = student("LiSi", 1);
//创建动态内存分配的类对象,创建时,调用无参构造函数,如果这个构造函数是由编译器为类提供的,则类中成员变量不进行初始化
student* d = new student;
//创建动态内存分配的类对象,创建时,调用无参构造函数,如果这个构造函数是由编译器为类提供的,则类中成员变量进行初始化
student* e = new student();
//创建动态内存分配的类对象,创建时,调用有参构造函数
student* f = new student("WangWu", 2);
//创建对象指针
student* g = &a;
//创建对象引用
student& h = a;
//创建类对象的数组,数组对应的类中必须包含无参构造函数,数组中的每一个元素都需要调用无参构造函数进行初始化
student i[10];
五,访问对象的成员
1.使用对象访问成员
访问成员变量:对象名.成员变量名
访问成员函数:对象名.成员函数名(参数表)
2.使用指针访问对象的成员
访问成员变量:指针名->成员变量名
访问成员函数:指针名->成员函数名(参数表)
3.使用引用访问对象的成员
访问成员变量:引用名.成员变量名
访问成员函数:引用名.成员函数名(参数表)
六,类成员的可访问范围
访问范围说明符 | 含义 |
---|---|
public(公有) | 使用它修饰的成员可以在程序的任何地方被访问 |
private(私有) | 使用它修饰的成员只能在本类中被访问 |
protected(保护) | 使用它修饰的成员只能在本类或者子类中被访问 |
隐藏的作用:设置私有成员的机制叫作“隐藏”,这样做的好处有:
1.有利于程序的修改。
如果以后修改了成员变量的类型等属性,只需要更改成员函数即可。否则,所有直接访问成员变量的语句都需要修改。
2.避免对对象的不正确操作。
有的成员函数,设计它们的初衷只是用来让本类中成员函数调用的,给这些函数起辅助作用,并不希望对外开放,因此就可以将它们声明为私有的,隐藏起来。现代软件开发绝大多数是合作完成的,一个程序员设计了一个类,很可能被许多程序员使用。在设计类的时候,应当尽可能隐藏使用者不需要知道的实现细节,只留下必要的接口(即一些成员函数)来对对象进行操作,这样能够避免类的使用者随意使用成员函数和成员变量而导致错误。
七,标识符的作用域与可见性
标识符的作用域是指标识符的有效范围。C++中标识符的作用域有:函数原型作用域、局部作用域(块作用域)、类作用域和命名空间作用域。
1.函数原型作用域
在声明函数原型时形参的作用范围就是函数原型作用域,这是C++程序中最小的作用域。例如,如下的函数声明中,标识符a
的作用范围就在函数func
形参列表中有效。
void func(int a);
2.局部作用域
程序中使用相匹配的一对大括号括起来的一段程序称为块。作用域局限在块内的称为局部作用域。具有局部作用域的变量又称为局部变量。
3.类作用域
类中成员的作用域。
4.命名空间作用域
命名空间是为了消除同名引起的歧义,定义格式如下:
namespace 命名空间名
{
命名空间内的各种声明(函数声明、类声明、...)
}
一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的、不属于前面所述各个作用域的标识符,都属于该命名空间作用域。具有命名空间作用域的变量也称为全局变量。
对于在不同的作用域声明的标识符,可见性的一般原则如下:
- 标识符要声明在前,引用在后。
- 在同一个作用域中,不能声明同名的标识符。在没有互相包含关系的不同作用域中声明的同名标识符,互不影响。
- 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层仍然可见。如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种机制称为隐藏规则。