日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C++深入探索類真正的形態(tài)之struct與class_C 語(yǔ)言

作者:清風(fēng)自在?流水潺潺 ? 更新時(shí)間: 2022-06-19 編程語(yǔ)言

一、類的關(guān)鍵字

  • struct 在 C 語(yǔ)言中已經(jīng)有了自己的含義,必須繼續(xù)兼容
  • 在C++ 中提供了新的關(guān)鍵字 class 用于類定義
  • class 和 struct 的用法是完全相同的
  • 在用 struct 定義類時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 public
  • 在用 class 定義類時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

如下:

下面看一段使用 class 的代碼:

#include <stdio.h>
 
struct A
{
    // defualt to public
    int i;
    // defualt to public
    int getI()
    {
        return i;
    }
};
 
class B
{
    // defualt to private
    int i;
    // defualt 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;
    
    printf("b.getI() = %d\n", b.getI());
    
    return 0;
}

下面為輸出結(jié)果,運(yùn)行報(bào)錯(cuò),指出 class 聲明的類,所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

在 class B 里面加個(gè) public 即可,如下:

class B
{
public:
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};

下面為輸出結(jié)果:

二、類的真正形態(tài)

C++ 中的類支持聲明和實(shí)現(xiàn)的分離

將類的實(shí)現(xiàn)和定義分開(kāi)

  • .h頭文件中只有類的聲明
  • 成員變量和成員函數(shù)的聲明
  • .cpp源文件中完成類的其它實(shí)現(xiàn)
  • 成員函數(shù)的具體實(shí)現(xiàn)

三、小實(shí)例

需求:開(kāi)發(fā)一個(gè)用于四則運(yùn)算的類

提供 setOperator 函數(shù)設(shè)置運(yùn)算類型

提供 setParameter 函數(shù)設(shè)置運(yùn)算參數(shù)

提供 result 函數(shù)進(jìn)行運(yùn)算

  • 其返回值表示運(yùn)算的合法性
  • 通過(guò)引用參數(shù)返回結(jié)果

代碼如下:

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)
{
    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;
}

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

下面為輸出結(jié)果:

四、小結(jié)

C++ 引進(jìn)了新的關(guān)鍵字 class 用于定義類

struct 和 class 的區(qū)別在于默認(rèn)訪問(wèn)級(jí)別的不同

C++ 中的類支持聲明和實(shí)現(xiàn)的分離

  • 在頭文件中聲明類
  • 在源文件中實(shí)現(xiàn)類

原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/123097005

欄目分類
最近更新