C++深度解析 类的真正形态---struct,class(15)

C++深度解析 类的真正形态---struct,class(15)

 

 

 

类的关键字class

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

classstruct用法是完全相同的。

 

 

 

class和struct区别

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

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

struct A
{
    //default to public
    int i;
    //default to public
    int getI()
    {
        return i;
    }
};
class B
{
    //default to private
    int i;
    //default to private
    int getI()
    {
        return i;    
    }
};

在使用struct或者class定义类时,都必须指出每一个成员的访问级别,是一个好的习惯。

示例程序:

#include <stdio.h>

struct A
{
    // default to public
    int i;
    // default to public
    int getI()
    {
        return i;
    }
};

class B
{
    // default to private
    int i;
    // default to private
    int getI()
    {
        return i;
    }
};

int main()
{
    A a;
    B b;
    
    a.i = 4;
    
    printf("a.getI() = %d\n", a.getI());
    
    //b.i = 4; //错误的,b.i是私有的,在外部无法访问的
    
    //printf("b.getI() = %d\n", b.getI()); //错误的,b.getI()是私有的,在外部无法访问的
    
    return 0;
}

结果如下:

 

 

 

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

将类的实现定义分开:

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

 

 

 

小实例

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

  1. 提供setOperator函数设置运算类型(加减乘除)
  2. 提供setParameter函数设置运算参数(运算数)
  3. 提供result函数进行运算(结果)

其返回值表示运算的合法性

通过引用参数返回结果

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) //接受一个字符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和mP2

    mP1 = p1;

    mP2 = p2;

}


//计算结果

bool Operator::result(double& r) //返回计算是否成功,引用r是计算的结果

{

    bool ret = true;

        

    switch( mOp ) //操作符

    {

        case '/':
            //看一下右操作数mP2是不是0

            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++中的类支持声明和实现的分离

  • 在头文件中声明类(类的使用
  • 在源文件中实现类(类的内部实现细节

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值