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