【C++总复习】第2章----类和对象的特性

1.面向对象的程序设计

1.1对象

客观世界中任何一个事物都可以看成一个对象(object),任何一个对象都具有属性行为这两个要素,对象可以根据外界给的信息进行相应的操作,一个对象一般由一组属性和一组行为构成。

  • 例如:将本人作为一个对象时有两个要素:一是静态特征,比如我有身高、体重、三围等,这些统称为属性;二是动态特征,比如我会跑步、吃饭、打球等,这些统称为行为。如果我在学习,我妈喊了一句:吃饭了!我便执行吃饭这种行为,其中我妈的这句话被称为消息

消息会要求对象实现某一行为(功能)
在C++中,每个对象都是由数据和函数组成,数据就是属性,函数就是行为,用来实现某种功能。

1.4抽象与类

抽象:将同一类事物的共同部分抽取出来
类就是对象的抽象,对象则是类的具体表现形式

1.3封装与信息隐蔽

对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说外界是看不到的,甚至是不可知的,留下一些外部接口,来访问对象中的内容,外部程序无需明白对象内部是如何实现的,只需要通过留下的接口访问对象即可,这种封装将对象的内部实现和外部行为分开
在这里插入图片描述

  • 图中最底层都是对象,第二层是由具体的人抽象出来的类,最高层这是由不同的类再次抽象出来的类

1.4继承与重用

C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类,这就可以重用已有软件中的一部分代码,这就是“代码复用”。

  • 例如:B类继承A类,B称为子类,A称为父类,A类中的大部分属性和行为都会被B类继承而来,无需在B类中重写再写一遍。

在这里插入图片描述

1.5多态

多态性:由继承而产生的的不同类,其对象会对同一消息产生不同的响应。

  • 例如:甲乙丙三个同学都是同一年级不同班级的学生,他们都有基本的属性和行为,在同时听到上课铃声时,他们都会走进不同的教室上课,而不是同一个教室。

1.6面向对象程序设计的特点

  • 面向对象程序设计的设计思路是:将数据和操作封装成一个个对象,降低程序块与程序块之间的耦合程度
  • 程序设计者的任务有两方面:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起,二是考虑怎样向有关对象发送消息,以完成所需的任务。

1.7类和对象的作用

  • 类的作用:类是实现面向对象程序设计的基础,C++对C的改进就是增加了“类”这种类型。类是所有面向对象的语言的共同特征。
  • 对象的作用:对象是类的具体例子,为了实现类中的功能必须通过对象来体现,我们在程序设计时也是面向对象的。
  • 面向过程的结构化程序设计:程序 = 算法 + 数据结构
  • 面向对象的程序设计:程序 = (对象+…+对象)+ 消息
    ------------------------------对象 = 算法 + 数据结构

1.8面向对象的软件开发

OOA---->OOD---->OOP---->OOT---->OOSM
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
OOT:面向对象测试
OOSM:面向对象维护

2.类的声明和对象的定义

2.1类和对象的关系

  • 类是对象的抽象,对象是类的具体实例
  • 类是抽象的,不占用内存;对象是具体的,占用存储空间

2.2声明类的类型

  • C语言中常用结构体来表示某一个类
struct Student{		//声明一个名为Student的结构体类型
	int num;
	char name[20];
	char sex;
};
Student stud1,stud2;	//定义两个结构体变量stud1和stud2
  • C++中面向对象机制这样来表示某一个类
class Student{	//声明一个学生类
private:	//声明以下部分为私有权限,只能在本类中访问
	int num;
	char name[20];
	char sex;
public:		//声明以下部分为公有权限,可以在本程序其他位置访问
	void dispaly(){
		cout<<"num = "<<num<<endl;
		cout<<"name:"<<name<<endl;
		cout<<"sex:"<<sex<<endl;
	}
};
Student stud1,stud2;	//定义两个学生类对象
  • 结构体和类的区别:结构体的默认权限是public,类的默认权限是private

2.3定义对象的方法

  • class 类名 对象名
class Student stud1,stud2;
  • 类名 对象名
Student stud1;
Student stud2;

3.类的成员函数

3.1在类内定义成员函数

class Student{
public:
	void move(){
		cout<<"I'm moving!"<<endl;
	}
};

3.2在类外定义成员函数

在类外定义成员函数时,需要使用“::”作用域运算符来声明函数是属于哪一个类的

class Student{
public:
	void move();
};
void Student::move(){
	cout<<"I'm moving!"<<endl;
}
  • Student::move()表示move方法是属于Student类的
  • ::move()表示move方法不属于任何一个类,它是一个全局函数

3.3内置成员函数

见此博客

class Student{
public:
	inline void move();
};
inline void Student::move(){
	cout<<"I'm moving!"<<endl;
}

3.4成员函数的存储方式

  • 系统为每个对象分配单独的空间,每个对象所占用的空间只是该对象的数据成员的存储空间,而不包括函数代码所占用的存储空间
  • 同一个类中的不同对象的数据是不同的,但调用的其实是同样内容的代码,即只用一段空间来存放共同函数的代码,在调用对象时,都去调用这个公用的函数代码
    在这里插入图片描述

4.成员对象的引用

class Student{
public:
	int num;
	void dispaly{
		cout<<"num = "<<num<<endl;
	}
};

4.1通过对象名和成员运算符访问对象成员

访问方法:对象名.成员名

Student stu;

stu.num = 10;	//访问num属性
stu.display();	//调用成员函数

4.2通过指向对象的指针访问对象成员

Student stu,*p;		//定义对象t和指针变量p
p = &t;				//指针p指向t对象

(*p).num = 100;		//利用指针间接访问属性和函数
(*p).display();

p->num = 100;
p->display();

4.3通过对象的引用访问对象成员

Student stu;		//定义对象
Student &referStu = stu;	//定义引用

referStu.num = 1001;	//通过引用访问属性
referStu.display();		//通过引用调用成员函数

5.公有接口与私有实现

  • 私有实现:类中被操作的数据是私有的,类功能的实现细节对用户是隐蔽的。
  • 公有接口:类在对数据进行封装之后,会留出一些公有权限的函数,让用户可以合法的对类中私有数据进行操作,这些公有权限函数称为公有接口。
class Student{
private:		//以下数据私有实现,只能在类内部的函数进行访问
	int num;
	int age;
public:			//以下公有函数为公有接口,可以在类外进行访问
	void setNum(int num);
	void setAge(int age);
	int getNum();
	int getAge();
	void displayInfor();
};
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值