類與封裝的概念:
1、類:
類的實現、類的使用。
當使用類的時候,不需要關心實現的細節。當創建類的時候,才需要考慮到內部具體的實現細節。
2、類的封裝:
成員變量,C++用於表示屬性的變量。
成員函數,C++中用於表示類的行為的函數。
3、pubic、private關鍵字。(使得變量和函數有了訪問權限)
pubic:成員變量和成員函數。可以在類的外部被訪問。
private:成員變量和成員函數,只可以在內部被訪問。
4、類成員的作用域:
類成員的作用域只在類的內部,外部無法直接訪問。(可以通過定義對象的方式進行訪問)
成員函數可以直接訪問成員變量和調用成員函數。
類的外部可以通過類變量訪問public成員。
類的作用域與訪問權限無關
5、struct 與class 不同之處
C++中struct定義的類中所有的成員默認為public
class定義的類中左右的成員默認為private
實驗:寫出一個四則運算的類。
1、 calculate.h(頭文件,用於定義類)
#ifndef __CALCULATE_H #define __CALCULATE_H class calculate { private: char symbol; double val_laft; double val_right; public: bool get_symbol(char op); void get_val(double latf,double right); bool result(double &r); }; #endif
2、創建calculate.cpp (源文件,具體實現)
#include "calculate.h" bool calculate::get_symbol(char op) { if(op == '+' || op == '-' || op == '*'|| op == '/') { symbol = op; return true; }else { return false; } } void calculate::get_val(double latf,double right) { val_laft = latf; val_right = right; } bool calculate::result(double &r) { bool ret = true; switch(symbol) { case '/': if(val_right == 0) ret = false; else r = val_laft/val_right; break; case '*': r = val_laft*val_right; break; case '+': r = val_laft+val_right; break; case '-': r = val_laft-val_right; break; default: ret = false; break; } return ret; }
3、創建主函數:
#include <stdio.h> #include "calculate.h" int main(int argc, char *argv[]) { double r; calculate test; test.get_symbol('/'); test.get_val(10,5); if( test.result(r) ) { printf("r = %lf\n",r); } else printf("calculate error\n"); return 0; }
4、編譯: g++ main.cpp calculate.cpp
5、運行結果:
r = 2.000000
C++中 ::作用域限定符
表示作用域,和所屬關系。
比如一個A類:
存在一個函數test是屬於A的,如下:
關於::的具體解析:
::是運算符中等級最高的,它分為三種:
1)global scope(全局作用域符),用法(::name)。
2)class scope(類作用域符),用法(class::name)。
3)namespace scope(命名空間作用域符),用法(namespace::name)。
都是左關聯(left-associativity),作用都是為了更明確的調用想要的變量。
如在程序中的某一處想調用全局變量a,那么就寫成::a,如果想調用class A中的成員變量a,那么就寫成A::a,另外一個如果想調用namespace std中的cout成員,就寫成std::cout意思是在這里想用cout對象是命名空間std中的cout。
擴展資料:
C++中"std::":
std是一個類(輸入輸出標准),它包括了cin成員和cout成員,using name space std ,以后才能使用它的成員。其工作原理:
程序因為要體現高性能,所以都是編譯型的。但其開發環境,為了方便測試,將調試環境做成解釋型的。即開發過程中,以解釋型的逐條語句執行方式來進行調試,以編譯型的脫離開發環境而啟動運行的方式來生成程序最終的執行代碼。