我們之前在 C++ 中表示類的時候,是用 struct 表示的。那么經過這些改進,結構體 struct 變得越來越不像它在 C 語言中的樣子了。因此在 C++ 總提供了新的關鍵字 class 用于類定義,class 和 struct 的用法是完全相同的。
那么 class 和 struct 有什么區別呢?在用 struct 定義類時,所以的成員默認訪問級別為 public;在用 class 定義類時,所有的成員的默認訪問級別為 private。我們來以代碼為例進行分析
#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 = 2;
printf("a.getI() = %d\n", a.getI());
b.i = 3;
printf("b.getI() = %d\n", b.getI());
return 0;
}我們分別用 struct 和 class 定義了類A 和 類B,我們分別給它們的 i 進行賦值,再調用 getI 函數進行打印。依照我們之前所說的,類B 的應該打印會出錯,我們看看編譯結果

我們看到它確實報錯了,說類B 中的成員是私有的。我們在第 17 行聲明為 public,再次編譯

我們看到這次編譯通過,并且成功的打印出它們的值了。
下來我們開發一個用于四則運算的類:提供 setOperator 函數設置運算類型;提供 setParameter 函數設置運算參數;提供 result 函數進行運算,其返回值表示運算的合法性,通過引用參數返回結果。在 C++ 中的類支持聲明和實現的分離,也就是將類的實現和定義分開。 .h 頭文件中只有類的聲明:成員變量和成員函數的聲明。 .cpp 源文件中完成類的其它實現:成員函數的具體實現。
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);
};
#endifOperator.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.setParameter(9, 3);
op.setOperator('/');
if( op.result(r) )
{
printf("r = %lf\n", r);
}
else
{
printf("Calculate error!\n");
}
return 0;
}我們編譯下看看是否如我們所愿

我們看到已經正確執行,那么我們看到頭文件和實現的源文件分開來,代碼可維護性提高了。test.cpp 文件中寫的代碼很少,很清晰。這便是聲明和實現分離的效果了。通過對類的學習,總結如下:1、C++ 引進了新的關鍵字 class 用于定義類,struct 和 class 的區別在于默認訪問級別不同;2、在 C++ 中的類支持聲明和實現的分離:在頭文件中聲明類,在源文件中實現類。
歡迎大家一起來學習 C++ 語言,可以加我QQ:243343083。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。