第16课类的真正形态

类的真正形态(上)函数

问题:通过不停的改进,结构体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++中的类支持声明和实现的分离
  在头文件中声明类
  在源文件中实现类

相关文章
相关标签/搜索