什么是C++中的类?(类到底有什么用?)

类是c++的一个重要特性,C语言是面向过程编程的话,C++就是面向对象编程,过程与对象是对C++与C的最显著的区别,当然,换句话说,如果不能清晰的理解类,那么对于一些科班出身的计算机专业学生来说,你和非科班学的C语言是没有什么区别的。这里笔者着重说一下什么是类,到底有什么用?

函数很好理解,它可以有效提高代码的重用性和代码的简洁性以及代码的可读性。但是,当进行大型程序设计时,这种方式不能提供更有效的代码重用机制和软件维护机制,尤其不方便类的使用者。

学习过类的读者可能知道,类有两个属性私有属性和公有属性,私有属性内的数据成员在类的外部是无法访问的,而公有属性是可以被访问的,这就保证了数据的安全性。

安全性,经常提到的一个名词,但是对于初学者来说确实很难来理解。现在的课程设置不难发现,几乎所有专业都学计算机,学界有句调侃,叫做“马克思学python”系列,纵观各大理工科专业,无论是应用数学,还是理论物理,或是自动化,测绘,地理信息,生物信息等工科都学很多计算机,C语言,python,数据结构,一样都不落,等到了博士,几乎所有工科博士单论编程而言,能力都很强,那么问题来了,他们在学计算机的同时还学了许多本专业知识(例如地理学,生物学),那么我们科班出身的计算机专业的学生优势又在哪里呢?我们只能学的更深更难吗?不全是,比如说我们设计一个类,这个类可以提供给自动化专业的同学们使用,那么我们要考虑的问题就不仅仅是怎么去解决问题了,而是怎样在解决问题的同时更加方便类的使用者(即那些自动化的同学)。举个例子,我们熟悉的Qt库(库和类相似,只不过库更庞大一些,例如C++本身就提供了许多库),几乎所有专业进行界面编程时都会用到,而我们本专业的学生就需要,设计类似于Qt库这样的类,在解决问题的同时,方便类的使用者也很重要。所以,我们就要传进更少的参数,将可以不传进的参数都放在类里面获得(即设置为类的私有数据成员),而在类的外面,即对类的使用者而言,这些数据成员的值是无法修改的,这也就保证了数据的安全性。因为主函数是类的使用者进行编写,所以我们传进的参输越少,就与可以方便他们的使用,这就是类的基本理解,它可以代码的重用性。

下面来看两种代码:

// An highlighted block
case '2':
			cout << "您选择了\"2 —— 添加学生" << endl;
			if (m == 30)
			{
    
    
				cout << "学生人数范围应在[1,30]之间,添加学生失败!" << endl;
			}
			else if (p.getstuListSize() == 0)
			{
    
    
				cout << "成绩单为空,请先创建成绩单!" << endl;
			}
			else
			{
    
    
				cout << endl;					//清空键盘缓冲区
				cout << "请输入第" << m+1<< "条记录;" << endl;
				cout << "请输入学号:" << endl;				//输入学号
				cin >> a;
				int i = 0;
				m = p.getstuListSize();
				p.m_2issame(i, m, a);
				if (i == m)
				{
    
    
					cout<<"请输入姓名:";				//输入姓名
					cin >> b;
					cout<<"请输入数学成绩:";			//输入数学成绩
					cin >> c;
					cout << "请输入语文成绩:";			//输入语文成绩
					cin >> d;
					cout<<"请输入英语成绩:";			//输入英语成绩
					cin >> e;
					p.m_2(m, a, b, c, d, e);
					cout << "创建第" << m + 1 << "条学生记录成功!" << endl;
				}
			}
			break;

上面的是一个学生管理系统的程序的添加学生功能,看m_2那个成员函数,他需要传进6个参数,这对于不是类的创建者来说使用起来难度很大,需要重新阅读程序,将其读懂,才能进行主函数的书写,虽然用了类,但是还是面向过程的思想,而再看下面的真正的面向对象编程的代码:

// An highlighted block
case '2':
			cout << "您选择了\"2 —— 添加学生" << endl;
			p.m_2();
			break;

主函数中仅仅四行而已。
再看看类里面的函数定义:

// An highlighted block
void m_2() {
    
    
		if (m_2issame()) {
    
    
			cout << "请输入学号:";
			cin >> m_number[stuListSize];
			cout << "请输入姓名:";
			cin >> m_name[stuListSize];
			cout << "请输入分数:";
			cin >> m_score[stuListSize][0] >> m_score[stuListSize][1] >> m_score[stuListSize][2];
			m_score[stuListSize][3] = (m_score[stuListSize][0] + m_score[stuListSize][1] + m_score[stuListSize][2]) / 3;
			stuListSize += 1;
		}
		else {
    
    
			if (stuListSize == 30)
			{
    
    
				cout << "学生人数范围应在[1,30]之间,添加学生失败!" << endl;
			}
			else if (stuListSize == 0)
			{
    
    
				cout << "成绩单为空,请先创建成绩单!" << endl;
			}
		}
	}
	bool m_2issame() {
    
    
		string a;
		int i;
		for (i = 0; i < stuListSize; i++) //学号不能重复 
		{
    
    
			if (m_number[i] == a)
			{
    
    
				cout << "输入学号重复!请重新输入!" << endl;
				return false;
			}

		}
		if (i == stuListSize)
			return true;
	}

可以看出类里面相对还是很复杂的。

现在问题应该已经清晰了,我们就是将函数封装在函数内部,在使用时,比如,我们要使用添加学生这一功能,只需要通过对象调用m_2就可以了。而具体的实现细节,类的使用者不需要关注,这就十分方便了。

而对于科班出身的我们,要做的就是设计更加优秀的类。

大家的赞,是对我最大的肯定!!

猜你喜欢

转载自blog.csdn.net/myf_666/article/details/113578745