第16课 类的真正形态

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第16课 类的真正形态相关的知识,希望对你有一定的参考价值。

经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了。

类的关键字:

技术分享图片

 

 

类的关键字:

技术分享图片

示例程序:

 1 #include <stdio.h>
 2 
 3 struct A
 4 {
 5     // defualt to public
 6     int i;
 7     // defualt to public
 8     int getI()
 9     {
10         return i;
11     }
12 };
13 
14 class B
15 {
16     // defualt to private
17     int i;
18     // defualt to private
19     int getI()
20     {
21         return i;
22     }
23 };
24 
25 int main()
26 {
27     A a;
28     B b;
29     
30     a.i = 4;
31     
32     printf("a.getI() = %d
", a.getI());
33     
34     b.i = 4;
35     
36     printf("b.getI() = %d
", b.getI());
37     
38     return 0;
39 }

34、36行是错误的,不能访问private级别的成员。

小实例:

技术分享图片

 

 类的真正形态:

技术分享图片

 

头文件如下:

 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

源文件如下:

 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     
 9     op.setOperator(/);
10     op.setParameter(9, 3);
11     
12     if( op.result(r) )
13     {
14         printf("r = %lf
", r);
15     }
16     else
17     {
18         printf("Calculate error!
");
19     }
20     
21     return 0;
22 }

 

运算结果如下:

技术分享图片

 

小结:

技术分享图片

 

以上是关于第16课 类的真正形态的主要内容,如果未能解决你的问题,请参考以下文章

第0课 - 数据结构引言

第16课 pycharm 使用

第12课 - 实模式到保护模式(下)

第4课 - 顶层父类的创建

第24课经典问题解析(下)--------类的成员函数和成员变量隶属某个具体对象吗

第16课 - 保护模式中的特权级(中)