类中的封装

来源:互联网 发布:达利制衣 淘宝店 编辑:程序博客网 时间:2024/06/08 11:20
类通常分为以下两个部分:
类的实现细节;
类的使用方式;



当使用类时,不需要关心其实现细节;
当创建一个类时,才需要考虑其内部实现细节;


装的基本概念:
根据日常生活中的经验:并不是类的每个属性都是对外公开的
如:女孩子不希望外人知道自己的年龄和身高;
如:一些男孩子不希望别人知道自己会尿床;
而一些类的属性是对外公开的
如:人类的姓名,学历,国籍等;
因此,需在类的表示法中定义属性和行为的公开级别
类似文件系统中文件的权限;

C++中类的封装:

员变量
C++中用于表示类属性的变量;
员函数
C++中用于表示类行为的函数;
C++中可以给成员变量和成员函数定义访问级别
public
成员变量和成员函数可以在类的内部和外界访问和调用;
private
员变量和成员函数只能在类的内部被访问和调用;

类成员的作用域:

类成员的作用域都只在类的内部,外部无法直接访问
员函数可以直接访问成员变量和调用其它成员函数;
类的外部可以通过类变量访问public成员
类成员的作用域与访问级别没有关系;

C++中用struct定义的类的所有成员默认为public


类的真正形态:

structC语言中已经有了自己的含义,只能继续兼容;
C++中提供了新的关键字class用于类定义;
classstruct的用法是完全相同的;

在用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

#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;
}
#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;
}

类的精华在于封装

将实现细节和使用方式相分离;
C++中通过publicprivate实现类的封装
public成员可以通过变量被外界访问;
private成员只能够在类内部使用;
类的定义和实现可以分开到不同的文件中





0 0
原创粉丝点击