经过不停的改进,结构体struct变得越来越不像它在C语言中的样子,我们的意识中struct定义一个变量的集合,到了C++,现在的struct定义的是一个类,但是它可以定义自己的函数和访问权限,这在C里面是不允许的,C++顾名思义兼容C语言的一切然后发展属于自己的东西,然而struct在C++这改变了原有的含义,所以我们必须找出其他方法来替代struct,所以C++中提供了新的关键字class用于类定义,class和struct(尽量避免使用)的用法是完全相同的
class和struct的区别
在用struct定义类时,所有成员的默认访问级别为public
在用class定义类时,所有成员的默认访问级别为private
例子:
编译运行:
可以看出我们的class的默认级别时private,我们在类外部访问它会出错
C++中的类支持声明和实现的分离,将类的实现和定义分开
.h头文件中只有类的声明,类的声明表示用户需求
成员变量和成员函数的声明
.cpp源文件中完成类的其他实现
成员函数的具体实现
operation.h
#ifndef _OPERATION_H
#define _OPERATION_H
class operation
{
private:
char Mop;
double Mp1;
double Mp2;
public:
bool setOpeartion(char mop);
void setPatamter(double mp1,double mp2);
bool result(double &r);
};
#endif
operation.c
#include "operation.h"
bool operation::setOpeartion(char mop)
{
bool ret = false;
if((mop=='+')||(mop=='-')||(mop=='*')||(mop=='/'))
{
ret = true;
Mop = mop;
}
else
{
Mop = '\0';
}
return ret;
};
void operation::setPatamter(double mp1,double mp2)
{
Mp1 = mp1;
Mp2 = mp2;
}
bool operation::result(double &r)
{
bool ret = true;
switch(Mop)
{
case '/':
if((-0.000000001<Mp1)&&(0.000000001>Mp2))
{
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;
}
test.c
#include <stdio.h>
#include "operation.h"
int main()
{
operation op;
double r = 0;
op.setOpeartion('/');
op.setPatamter(9, 3);
if( op.result(r) )
{
printf("r = %lf\n", r);
}
else
{
printf("Calculate error!\n");
}
return 0;
}
结果:
上面的代码采用了面向对象的方法,将类的声明和定义分开,计算一个四则运算,可见面向对象的方法让我们的代码更加容易扩展,移值,层次分明