类的真正形态

问题

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

struct 在 C 语言中已经有了自己的含义,必须继续兼容

在 C++ 中提供了新的关键字 class 用于类定义

class 和 struct 的用法是完全相同的

class 和 struct 的区别

在用 struct 定义类时,所有成员的默认访问级别为 public

在用 class 定义类时,所有成员的默认访问级别为 private

class 的初探

#include <stdio.h>struct A
{// defualt to publicint i;// defualt to publicint getI(){return i;}
};class B
{// defualt to privateint i;// defualt to privateint getI(){return i;}
};int main()
{A a;B b;a.i = 4;printf("a.getI() = %d\n", a.getI());b.i = 4;printf("b.getI() = %d\n", b.getI());return 0;
}

第 34 行和 第 36 行报错是因为  对象 b 的类型 B 是用 class 定义的,class 的默认权限为 private,类变量无法访问 private 权限的成员变量和成员函数

需求:开发一个用于四则运算的类

提供 setOperator 函数设置运算类型

提供 setParameter 函数设置运算参数

提供 result 函数进行运算

  • 其返回值表示运算的合法性
  • 通过引用参数返回结果

C++ 中的类支持声明和实现的分离

将类的实现和定义分开

  • .h 文件中只有类的声明
    • 成员变量和成员函数的声明
  • .cpp 源文件中完成类的其他实现
    • 成员函数的具体实现

Operator.h


#ifndef _OPERATOR_H_
#define _OPERATOR_H_class Operator
{
private:char mOp;double mP1;double mP2;public:bool setOperator(char op);void setParameter(double p1, double p2);bool result(double& r);
};#endif

Operator.cpp

#include "Operator.h"bool Operator::setOperator(char op)
{bool ret = false;if( (op == '+') || (op == '-') || (op == '*') || (op == '/') ){ret = true;mOp = op;}else{mOp = '\0';}return ret;
}void Operator::setParameter(double p1, double p2)
{mP1 = p1;mP2 = p2;
}bool Operator::result(double& r)
{bool ret = true;switch( mOp ){case '/':if( (-0.000000001 < mP2) && (mP2 < 0.000000001) ){ret = false;}else{r = mP1 / mP2;}break;case '+':r = mP1 + mP2;break;case '*':r = mP1 * mP2;break;case '-':r = mP1 - mP2;break;default:ret = false;break;}return ret;
}

test.cpp

#include <stdio.h>
#include "Operator.h"int main()
{Operator op;double r = 0;op.setOperator('/');op.setParameter(9, 3);if( op.result(r) ){printf("r = %lf\n", r);}else{printf("Calculate error!\n");}return 0;
}

程序运行结果如下图所示

小结

C++ 引进了新的关键字 class 用于定义类

struct 和 class 的区别在于默认访问级别的不同

C++ 中的类支持声明和实现的分离

  • 在头文件中声明类
  • 在源文件中实现类

本文链接:https://my.lmcjl.com/post/2179.html

展开阅读全文

4 评论

留下您的评论.