第二章 面向对象基本概念

自学考试教材《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.访问范围说明符有publicprivateprotected,使用时需要在访问范围说明符后加
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 命名空间名
{
	命名空间内的各种声明(函数声明、类声明、...}

一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的、不属于前面所述各个作用域的标识符,都属于该命名空间作用域。具有命名空间作用域的变量也称为全局变量

对于在不同的作用域声明的标识符,可见性的一般原则如下:

  • 标识符要声明在前,引用在后。
  • 在同一个作用域中,不能声明同名的标识符。在没有互相包含关系的不同作用域中声明的同名标识符,互不影响。
  • 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层仍然可见。如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种机制称为隐藏规则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值