类的真正形态
类的关键字
struct在C语言中已经有了自己的定义,必须继续兼容
在C++中提供了新的关键字,class用于类定义
class和struct用法是完全相同
struct和class区别
用struct定义时,所有成员默认为public
用class定义时,所有成员默认为private
#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;
}
D:\BaiduYunDownload\第2期 — 披荆斩棘\第16课 - 类的真正形态\代码\16-1.cpp In function 'int main()':
17 9 D:\BaiduYunDownload\第2期 — 披荆斩棘\第16课 - 类的真正形态\代码\16-1.cpp [Error] 'int B::i' is private
34 7 D:\BaiduYunDownload\第2期 — 披荆斩棘\第16课 - 类的真正形态\代码\16-1.cpp [Error] within this context
19 9 D:\BaiduYunDownload\第2期 — 披荆斩棘\第16课 - 类的真正形态\代码\16-1.cpp [Error] 'int B::getI()' is private
36 38 D:\BaiduYunDownload\第2期 — 披荆斩棘\第16课 - 类的真正形态\代码\16-1.cpp [Error] within this context
实例:需求
开发一个用于四则运算的类
提供setOperator函数设置运算类型
提供setParameter函数设置运算参数
提供result函数进行运算
其返回值表示运算的合法性
通过引用参数返回结果
类的真正形态
C++中的类支持声明和实现的分离
将类的实现和定义分开
.h头文件中只有类的声明
成员变量和成员函数的声明
.cpp源文件中完成类的其他实现
成员函数的具体实现
operator.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_class 0perator
{
private:char mop;double mp1;double mp2;
piblic:bool setOperator(char op);void setParameter(double p1,double p2);bool result(double&r);
}
#endif
Operator.cpp
#include "Operator.h"
#include "stdio.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;seitch(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
}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;
}