溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++的struct與class怎么用

發(fā)布時(shí)間:2022-04-20 13:44:14 來(lái)源:億速云 閱讀:178 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容介紹了“C++的struct與class怎么用”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

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

  • struct 在 C 語(yǔ)言中已經(jīng)有了自己的含義,必須繼續(xù)兼容

  • 在C++ 中提供了新的關(guān)鍵字 class 用于類(lèi)定義

  • class 和 struct 的用法是完全相同的

  • 在用 struct 定義類(lèi)時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 public

  • 在用 class 定義類(lèi)時(shí),所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

如下:

C++的struct與class怎么用

下面看一段使用 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 聲明的類(lèi),所有成員的默認(rèn)訪問(wèn)級(jí)別為 private

C++的struct與class怎么用

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

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

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

C++的struct與class怎么用

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

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

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

  • .h頭文件中只有類(lèi)的聲明

  • 成員變量和成員函數(shù)的聲明

  • .cpp源文件中完成類(lèi)的其它實(shí)現(xiàn)

  • 成員函數(shù)的具體實(shí)現(xiàn)

三、小實(shí)例

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

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

提供 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é)果:

C++的struct與class怎么用

“C++的struct與class怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI