类中的封装
来源:互联网 发布:达利制衣 淘宝店 编辑:程序博客网 时间:2024/06/08 11:20
类通常分为以下两个部分:
类的实现细节;
类的使用方式;
当使用类时,不需要关心其实现细节;
当创建一个类时,才需要考虑其内部实现细节;
封装的基本概念:
根据日常生活中的经验:并不是类的每个属性都是对外公开的
如:女孩子不希望外人知道自己的年龄和身高;
如:一些男孩子不希望别人知道自己会尿床;
而一些类的属性是对外公开的
如:人类的姓名,学历,国籍等;
因此,需要在类的表示法中定义属性和行为的公开级别
类似文件系统中文件的权限;
C++中类的封装:
成员变量
C++中用于表示类属性的变量;
成员函数
C++中用于表示类行为的函数;
在C++中可以给成员变量和成员函数定义访问级别
public
成员变量和成员函数可以在类的内部和外界访问和调用;
private
成员变量和成员函数只能在类的内部被访问和调用;
类成员的作用域:
类成员的作用域都只在类的内部,外部无法直接访问
成员函数可以直接访问成员变量和调用其它成员函数;
类的外部可以通过类变量访问public成员
类成员的作用域与访问级别没有关系;
C++中用struct定义的类的所有成员默认为public
类的真正形态:
struct在C语言中已经有了自己的含义,只能继续兼容;
在C++中提供了新的关键字class用于类定义;
class和struct的用法是完全相同的;
在用struct定义类时,所有成员的默认属性为public
在用class定义类时,所有成员的默认属性为private
一个运算类的实现:
#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
#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
#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;
}
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;
}
#include <stdio.h>
#include "Operator.h"
int main(int argc, char *argv[])
{
Operator op;
double r = 0;
op.setOperator('/');
op.setParameter(8, 4);
if( op.result(r) )
{
printf("Result is %f\n", r);
}
printf("Press any key to continue...");
getchar();
return 0;
}
#include "Operator.h"
int main(int argc, char *argv[])
{
Operator op;
double r = 0;
op.setOperator('/');
op.setParameter(8, 4);
if( op.result(r) )
{
printf("Result is %f\n", r);
}
printf("Press any key to continue...");
getchar();
return 0;
}
类的精华在于封装
将实现细节和使用方式相分离;
C++中通过public和private实现类的封装
public成员可以通过变量被外界访问;
private成员只能够在类内部使用;
类的定义和实现可以分开到不同的文件中
0 0
- java中的封装类
- 类中的封装
- java中的封装类
- 七、类中的封装
- 对ffmpeg中的sws_scale的封装类
- java中的基本数据类型与封装类
- java中的基本数据类型与封装类
- java中的基本数据类型与封装类
- lucene学习中的工具类封装
- 基类中的popwindow 再次封装
- delphi中的封装问题
- C#中的封装
- Java中的封装
- AS3中的封装
- 软件设计中的封装
- C中的封装?
- JavaScript中的封装
- 面向对象中的封装
- cocos2d-x完美适配了各种分辨率
- 第六章-结构
- openstack 命令行管理四 - 资源管理 (备忘)
- 直接插入排序
- Linux下安装Oracle11gR2 INS-20802 oracle net configuration assistant failed
- 类中的封装
- Python实现ssh批量登录并执行命令
- Linux中grep命令的12个实践例子
- 数据库事务
- 在iOS 7中使用storyboard(part 1)
- 搭建高可用mongodb集群(二)—— 副本集
- mysql主主关系配置
- 数字地,模拟地,电源地
- 多旋翼飞控篇新手课堂教程(共九集)