问题
经过不停地改进,结构体 struct 变得越来越不像它在 C 语言中的样子了!!!
struct 在 C 语言中已经有了自己的含义,必须继续兼容
在 C++ 中提供了新的关键字 class 用于类定义
class 和 struct 的用法是完全相同的
class 和 struct 的区别
在用 struct 定义类时,所有成员的默认访问级别为 public
在用 class 定义类时,所有成员的默认访问级别为 private
class 的初探
#include <stdio.h>struct A
{// defualt to publicint i;// defualt to publicint getI(){return i;}
};class B
{// defualt to privateint i;// defualt to privateint getI(){return i;}
};int main()
{A a;B b;a.i = 4;printf("a.getI() = %d\n", a.getI());b.i = 4;printf("b.getI() = %d\n", b.getI());return 0;
}
第 34 行和 第 36 行报错是因为 对象 b 的类型 B 是用 class 定义的,class 的默认权限为 private,类变量无法访问 private 权限的成员变量和成员函数
需求:开发一个用于四则运算的类
提供 setOperator 函数设置运算类型
提供 setParameter 函数设置运算参数
提供 result 函数进行运算
- 其返回值表示运算的合法性
- 通过引用参数返回结果
C++ 中的类支持声明和实现的分离
将类的实现和定义分开
- .h 文件中只有类的声明
- 成员变量和成员函数的声明
- .cpp 源文件中完成类的其他实现
- 成员函数的具体实现
Operator.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_class Operator
{
private:char mOp;double mP1;double mP2;public:bool setOperator(char op);void setParameter(double p1, double p2);bool result(double& r);
};#endif
Operator.cpp
#include "Operator.h"bool Operator::setOperator(char op)
{bool ret = false;if( (op == '+') || (op == '-') || (op == '*') || (op == '/') ){ret = true;mOp = op;}else{mOp = '\0';}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;
}
test.cpp
#include <stdio.h>
#include "Operator.h"int main()
{Operator op;double r = 0;op.setOperator('/');op.setParameter(9, 3);if( op.result(r) ){printf("r = %lf\n", r);}else{printf("Calculate error!\n");}return 0;
}
程序运行结果如下图所示
小结
C++ 引进了新的关键字 class 用于定义类
struct 和 class 的区别在于默认访问级别的不同
C++ 中的类支持声明和实现的分离
- 在头文件中声明类
- 在源文件中实现类
本文链接:https://my.lmcjl.com/post/2179.html
展开阅读全文
4 评论