类的真正形态(上)函数
问题:通过不停的改进,结构体struct变得愈来愈不像它在C语言中的样子了。
在C语言中,struct中是不能定义成员函数的,你若是实在想用成员函数,只能定义成函数指针的形式。这种方式在内核中太广泛了。spa
struct 在C语言中已经有了本身的含义,所以C++也得必须继续兼容,可是在兼容的基础上又有了改进,好比说能够定义成员函数了。
在C++中提供了新的关键字class用于类定义
class和struct的用法是彻底相同的指针
class和struct有什么本质区别?
在用struct定义类时,全部成员的默认访问级别为public
在用class定义类时,全部成员的默认访问级别为privatecode
struct A
{
//default to public
int i;
//default to public
int getI()
{
return i;
}
};blog
class A
{
//default to private
int i;
//default to private
int getI()
{
return i;
}
};
好的习惯:无论是用class定义类,仍是用struct定义类,必须显示的指明成员变量和成员函数的访问级别。开发
类的真正形态(下)get
小实例
需求:开发一个用于四则运算的类
-提供setOperator函数设置运算类型
-提供setParameter函数设置运算参数
-提供result函数进行运算
其返回值表示运算的合法性
经过引用参数返回结果it
C++中的类支持声明和实现的分离
声明就是类的使用方式,实现就是类的实现细节io
将类的实现和定义分开
-.h 头文件中只有类的声明
.成员变量和成员函数的声明
-.cpp源文件中完成类的其它实现
.成员函数的具体实现
实例分析
Operator类的分析
Operator.hclass
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 = '\0'; 15 } 16
17 return ret; 18 } 19
20 void Operator::setParameter(double p1, double p2) 21 { 22 mP1 = p1; 23 mP2 = p2; 24 } 25
26 bool Operator::result(double& r) 27 { 28 bool ret = true; 29
30 switch( mOp ) 31 { 32 case '/': 33 if( (-0.000000001 < mP2) && (mP2 < 0.000000001) ) 34 { 35 ret = false; 36 } 37 else
38 { 39 r = mP1 / mP2; 40 } 41 break; 42 case '+': 43 r = mP1 + mP2; 44 break; 45 case '*': 46 r = mP1 * mP2; 47 break; 48 case '-': 49 r = mP1 - mP2; 50 break; 51 default: 52 ret = false; 53 break; 54 } 55
56 return ret; 57 }
类已经定义好了,接下来进行类的使用
1 #include <stdio.h>
2 #include "Operator.h"
3
4 int main() 5 { 6 Operator op; 7 double r = 0; 8 op.setOperator('/'); 9 op.setParameter(9,3); 10
11 if (op.result(r)) 12 { 13 printf("r = %lf\n",r); 14 } 15 else
16 { 17 printf("Calculate error!\n"); 18 } 19
20 return 0; 21 }
小结:
C++引进了新的关键字class用于定义类
struct 和class的区别在于默认访问级别的不一样
C++中的类支持声明和实现的分离
在头文件中声明类
在源文件中实现类