您现在的位置是:首页 >技术教程 >用人话讲C++——类与对象的基本知识(3)网站首页技术教程

用人话讲C++——类与对象的基本知识(3)

优降宁 2024-07-09 10:31:09
简介用人话讲C++——类与对象的基本知识(3)

类的定义

类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合。
老师的属性和行为就可以封装成老师这一个类

what is 类

我们把具体物体的特征提炼出两种不同的特性,
一种是描述物体的相对静止的特征,如名称、颜色、数量等,称之为类的静态属性,我们可以用不同的数据来表现这些静态属性。
另一种是描述物体运动的特性,即与静态属性相关的操作,如计算、查找、排序等,这些动态的操作的称为类的动态属性,可以用函数来描述这些操作的执行过程。

就像人,自己的姓名、年龄、体重、身高等等的“名词”,就是类的静态属性;而自己能做的事情,比如说吃饭、睡觉、活着等,这些”动词“就是类通过函数定义要去完成的功能,叫做类的动态属性。

在类中,我们将表征静态属性的数据和与这些数据相关的操作封装在一起构成了一个相对封闭的集合体;其中用来描述这一类物品所共同拥有的代表静态属性的数据,称为数据成员,说明这一类对象共同拥有的动态特征的行为(即描述相关操作的函数),称为成员函数

为了用编程语言来描述一个人,人的“名词们”就统一搞在一起,叫数据成员;而用函数去描述人的行为的函数就叫做这个类里面的成员函数

在设计一个类时,要周密考虑如何进行封装,把不必要让外界知道的部分隐藏起来,也就是说,把一个类的内部实现和外部行为分割开来。类的设计者需要用准确的数据类型来描述类的静态特征,并用各种功能函数来说明该类如何进行对数据的操作。这样面向对象程序设计的第一要务就是定义一个合理的类

定义一个合理的类,就好比创建一个完整的生物,他有名字,身高,会活着,会吃饭…,但是它的有些东西是加密的,你无法直接通过看见这个生物,直接直到它的身高,出生年龄,三围(bushi)…,它会通过某种行为告诉你它的信息,所以它的“名词们”的类型是私有的,一开始只有自己知道的。而它会通过某种行为告诉你,那就是通过行为(成员函数),来传输或者加载自己的信息(数据成员),行为便是公共的。你问我,我不管回不回答,你都有一个结果,这就是成员函数返回的结果。

类的定义格式

类的定义格式一般分为说明部分实现部分
说明部分用来声明该类中的成员,包含数据成员的声明和成员函数的声明。数据成员可以是基本数据类型、数组、指针或其他类的对象。类的类型在可以包括的数据方面拥有非常大的灵活性。
实现部分用来对成员函数进行具体的定义。

说明部分就是告诉别人这个类中“有什么”和“能干什么”,而实现部分就是告诉别人“怎么做的”

以下是类的一般定义格式

class 类名
{
	[private:]
		私有数据成员和成员函数
	[protected:]
		保护数据成员和成员函数
	[public:]
		公有数据成员和成员函数
};

举个例子

class CDate
{
	public:
		int Date_Year;	//日期中的年份
		int Date_Month;	//日期中的月份
		int Date_Day;	//日期中的某一天
}

整个类的定义以分号结束注意这个分号一定不能少。所有类成员的名称都是该类的局部变量,也就是说在类外使用相同的名称不会引起重名问题。

public是类的访问控制关键字,被称为访问权限修饰符访问控制修饰符,将数据成员指定为public(公有属性),意味着类对象在作用域的任何位置都可以访问它们。还可以将类成员指定为private(私有属性)和protected(保护属性),这些关键字决定后跟着的类成员的访问属性(访问权限)。

类的封装和信息隐藏功能就是通过对类的成员设置访问属性进行控制的。

如果忽略访问属性的说明,那成员的默认属性就是private。

类的数据成员和成员函数可以根据需要声明为任意一种访问属性,声明时,访问属性出现的顺序和次数也是任意的,不受限制

别人问你的年龄、体重的次数没有个上限次数的,类的访问也是一样。

定义类的对象

定义类的对象与定义基本数据类型的变量方法完全相同,雷雨对象的关系可以用基本数据类型和基本数据类型变量之间的关系来类比。
类类型是抽象概念,对象是具体的实例。只有定义了对象,系统才会给对象分配相应的存储空间,定义对象的常用格式如下:

类名 对象名1[,对象名2, ... , 对象名n];

例如

CDate date1;
CDate date2;
CDate date3,date4;

访问类的数据成员

类的数据成员只有在类定义对象以后才有存储空间,此时的访问才有意义,访问对象的成员可以使用成员运算符“.”,其一般格式如下:

对象名.成员

当你这个人都没有的时候,讨论你长大以后会干什么这件事情是没有意义的,所以只有定义完类之后(有了人类,这个类),定义了类的对象之后(有了你这个对象人),知道你会干什么,你性甚,做甚,才有意义。
而在要了这么多的类的对象,你调用成员函数,那是调用谁的函数,访问的是谁的数据。就好比世界上有这么多人,你问他的姓名,是谁的姓名呢?所有格式是对象名.成员,访问的是这个对象的数据。

成员运算符“.”之前必须是能解释为类对象的内容,成员运算符“.”之后的成员包括数据成员和成员函数。

你操作的类必须是已经存在的了,总不可能去访问外星人的姓名年龄(我们没有任何相关的信息);而操作的函数或者是数据也应该是类中有的,总不可能去访问和尚的头发数量,这不科学,也没有意义。

在类定义内部,所有成员之间可以互相直接访问;但是在类的外部,只能以上述格式访问类的公有成员。主函数main()也在类的外部,所以,在主函数中定义的类对象,在操作时只能访问类中的公有成员。

类中的访问就好像大脑知道你自己所有的信息,自己调用自己的信息不用知道这个私不私密。

类成员函数的两种实现方式

在平常的生活中会遇到要设置一个具体的日期、调整日期、输出日期等,这一系列对日期的操作,是动态属性,在c++语言中以函数的形式表现出来,这样的函数就是类中的成员函数,它有权访问本类对象的所有成员。

一般情况下,类的成员都会指定访问属性,因为公有成员是类的对外接口,所以通常将成员函数定义为公有成员,这时该成员函数的原型对外公开,但其具体实现代码仍是封装在类内的。为了体现对数据的封装性,通常将数据成员定义为私有成员或保护成员

就像人,知道是如何发出声音的,如何能自己活着的。但是在我不说出来之前,在我脑中的信息对方是无法知道的,自己的身体结构就相当于一个公共属性的数据成员和成员函数,在我脑中的信息,则是private(私有)的数据。

class CDate{
	private:
		int Date_Year,Date_Month,Date_Day;
	public:
		void SetDate(int y, int m, int d){
			Date_Year = y;
			Date_Month = m;
			Date_Day = d;
		}
		void Display
}

正在补充ing

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。