类的真正形态(上)
问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了。
在C语言中,struct中是不能定义成员函数的,你如果实在想用成员函数,只能定义成函数指针的形式。这种方式在内核中太普遍了。
struct 在C语言中已经有了自己的含义,因此C++也得必须继续兼容,但是在兼容的基础上又有了改进,比如说可以定义成员函数了。
在C++中提供了新的关键字class用于类定义
class和struct的用法是完全相同的
class和struct有什么本质区别?
在用struct定义类时,所有成员的默认访问级别为public
在用class定义类时,所有成员的默认访问级别为private
struct A
{
//default to public
int i;
//default to public
int getI()
{
return i;
}
};
class A
{
//default to private
int i;
//default to private
int getI()
{
return i;
}
};
好的习惯:不管是用class定义类,还是用struct定义类,必须显示的指明成员变量和成员函数的访问级别。
类的真正形态(下)
小实例
需求:开发一个用于四则运算的类
-提供setOperator函数设置运算类型
-提供setParameter函数设置运算参数
-提供result函数进行运算
其返回值表示运算的合法性
通过引用参数返回结果
C++中的类支持声明和实现的分离
声明就是类的使用方式,实现就是类的实现细节
将类的实现和定义分开
-.h 头文件中只有类的声明
.成员变量和成员函数的声明
-.cpp源文件中完成类的其它实现
.成员函数的具体实现
实例分析
Operator类的分析
Operator.h
1 #ifndef _OPERATOR_H_
2 #define _OPERATOR_H_
3
4 class Operator
5 {
6 private:
7 char mOp;
8 double mP1;
9 double mP2;
10
11 public:
12 bool setOperator(char op);
13 void setParameter(double p1, double p2);
14 bool result(double& r);
15 };
16
17 #endif
Operator.cpp
1 #include "Operator.h"
2
3 bool Operator::setOperator(char op)
4 {
5 bool ret = false;
6
7 if( (op == '+') || (op == '-') || (op == '*') || (op == '/') )
8 {
9 ret = true;
10 mOp = op;
11 }
12 else
13 {
14 mOp = '