C++(类的真正形态---第16课)

1.类的关键字

struct在C语言中已经有了自己的含义,必须继续兼容 在C++中提供了新的关键字class用于类定义 class和struct的用法是完全相同的 class和struct有什么区别? 在用struct定义类时,所有成员的默认访问级别是public 在用class定义类时,所有成员的默认访问级别是private (定义类,不要用结构体用class)

小实例: 需求:开发一个用于四则运算的类 提供setOperator函数设置运算类型 提供setParameter函数设置运算参数 提供result函数进行运算 其返回值表示运算的合理性 通过引用参数返回结果

2.类的真正形态

C++中的类支持声明和实现的分离 将类的实现和定义分开 .h头文件中只有类的声明:成员变量和成员函数的声明 .cpp源文件中完成类的其它实现:成员函数的具体实现

实例分析:Operator类的分析

下面就上面的小实例感受类的真正形态。

2.1 .h文件

#pragma once

class Operator
{

public:
	bool setOperator(char op);
	void setParameter(double p1, double p2);
	bool result(double& r);
private:

	char mop;
	double mp1;
	double mp2;

};

2.2.cpp文件

#include "Operator.h"
#include <iostream>
using namespace std;
bool Operator::setOperator(char op)
{
	bool ret = false;
	if ((op == +) || (op == -) || (op == *) || (op == /))
	{
		mop = op;
		ret = true;
	}

	else 
	{
		mop = ;
	
	}
	return ret;

}
void Operator::setParameter(double p1,double p2)
{
	mp1 = p1;
	mp2 = p2;

}
bool Operator::result(double& r)
{
	bool ret = true;
	switch (mop)
	{
	case /:
		if ((-0.000000001 < mp2) && (mp2 < 0.000000001))
		{
			ret = false;
		}
		else
		{
			r = mp1 / mp2;
		}
		break;
	case +:
		r = mp1 + mp2;
		break;
	case -:
		r = mp1 - mp2;
		break;
	case *:
		r = mp1 * mp2;
		break;
	default:
		ret = false;
		break;
	}

	return ret;
}

3.mian文件

#include"Operator.h"
#include <iostream>

int main()
{
	double r=0;
	Operator Myclass;
	Myclass.setOperator(+);
	Myclass.setParameter(3,5);
	if (Myclass.result(r))
	{
		printf("r=%f
",r);
	}
	else
	{
		printf("Calculate error!
");
	}
	system("pause");
	return 0;
}

分析一波;

在类的头文件中3个私有变量的作用?

mop返回操作符号,这个操作符号只能是内部函数使用,使用在函数setOperator,将用户输入的+赋值给mop;

当调用result()函数的时候,可以直接使用mop(类中私有变量)判断具体使用哪个计算。

mp1和mp2主要是在调用setParameter 的时候将用户输入的2个数赋值给类内对象,然后给result()函数使用。

要是我可能就不会这样,因为我对类内变量的使用还不是很清楚,我觉得这个小案例,应该从下面的思路去思考。

1.用户只是需要输入 + - * /

2.用户输入 2个数

那么我要对它输入的数,来实现。所以我一定在类中包括上面输入的数。然后根据他们,再去设计函数去实现功能。

经验分享 程序员 微信小程序 职场和发展