第16课类的真正形态

类的真正形态(上)

问题:经过不停的改进,结构体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 = '';
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
",r);
14     }
15     else
16     {
17         printf("Calculate error!
");
18     }
19     
20     return 0;
21 }

小结:

C++引进了新的关键字class用于定义类
struct 和class的区别在于默认访问级别的不同
C++中的类支持声明和实现的分离
  在头文件中声明类
  在源文件中实现类

 

 

原文地址:https://www.cnblogs.com/-glb/p/11756044.html