第16课-类的真正形态
1. 问题
-
经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了
2. 类的关键字
-
struct在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; } }; struct B { // default to private int i; // default to private int getI() { return i; } };
3. 小实例
-
需求:开发一个用于四则运算的类
- 提供setOperator函数用于设置运算类型
- 提供setParameter函数用于设置运算参数
- 提供result函数进行运算
(1) 其返回值表示运算的合法性
(2) 通过引用参数返回结果
4. 类的真正形态
-
C++中的类支持声明和实现的分离
-
将类的声明和实现分开
- .h头文件中只有类的声明
成员变量和成员函数的声明
- .cpp源文件中完成类的其它实现
成员函数的具体实现
#ifndef _OPERATOR_H #define _OPERATOR_H class Operator { private: char m_op; double m_p1; double m_p2; public: void setOperator(char op); void setParametor(double p1, double p2); bool result(double& r); }; #endif #include "Operator.h" void Operator::setOperator(char op) { m_op = op; } void Operator::setParametor(double p1, double p2) { m_p1 = p1; m_p2 = p2; } bool Operator::result(double& r) { bool ret = true; switch( m_op ) { case '+': r = m_p1 + m_p2; break; case '-': r = m_p1 - m_p2; break; case '*': r = m_p1 * m_p2; break; case '/': if( (-0.000000001 < m_p2) && (m_p2 < 0.000000001) ) { ret = false; } else { r = m_p1 / m_p2; } break; default: ret = false; break; } return ret; }
5. 小结
-
C++中引进了新的关键字class用于定义类
-
struct和class区别在于默认访问级别的不同
-
C++中的类支持声明和实现的分离
- 在头文件中声明类
- 在源文件中实现类
本文出处:狄泰软件学院
浙公网安备 33010602011771号