⑴ 什麼是const成員函數
以下面這個例子來說明:
class base{
public: ...
void print()const{
cout<<n;
} ...private:
int n;
}12345678910
我們知道將成員函數修飾為const的,那麼這個函數就不能修改成員變數,也不能調用非const的成員函數。至於,為什麼會有這樣的功能,下面一一道來:
我們知道成員函數都有一個隱藏的參數那就是this指針,這個指針指向該類的本身。我們應該知道的是一個類對象的是由哪些部分構成的。對於一個類其獨有的東西就是他裡面的非靜態成員、虛函數表。而成員函數是所有類對象共享的。那麼這些由一個類的所有對象共享的函數是如何區分各個類對象呢。答案就是通過this指針。
base B;
B.print();12
這里聲明了一個類對象,然後用類對象調用了print方法。它的實質不妨這樣理解:
base B;
print(&B); //這里只是為了說明12
成員函數接受一個類對象的指針。到了函數內部就成了這樣:
print(base * const this){
cout<<this->n;
}123
散部在類對象外部的成員函數,通過一個類對象的指針來對類對象進行操作。這其實和C語言裡面針對一個結構體寫很多對於結構體進行操作的函數一樣。當我們需要操作結構體的時候,我們就要傳遞一個結構體的指針給這個函數。這下應該明白,這個this的意義了吧。當然這里的this是const的我們不能在成員函數類修改this的指向。
那麼現在話題回到成員函數後面的const上面。它依然和this有關系。在上面講this指針的時候,我們知道有下面這樣的轉化:
B.print();
|
Vprint(&B);
|
Vprint(base * const this){ //...do something
}123456789
所以在函數裡面我們可以做:
print(base * const this){ this->n=100;
cout<<this->n;
}1234
在成員函數裡面我們可以修改成員變數,但是這里我們明顯是不希望修改的。所以我們可以做下面這樣的修改:
print(const base* const this){ this->n=100; //錯誤,*this是const的。
}123
將指針指向的對象聲明為常量,這就保證了成員函數內部的操作不能修改成員變數了。但是我們知道this是隱式的,我們要在哪裡使用const來修飾this指針指向的對象呢。C++的設計者們說,把他放在函數的後面吧。所以就有了文章開頭的那種寫法。
下面考慮這樣一種情況,我們申明了一個常量對象
const base B;
B.print();
|
vprint(&B);12345
在print函數裡面,有與B是const的,所以*this是const的,而在非const的成員函數中,隱式的申明是base * const this 所以常量對象調用調用非const的成員函數,那麼就要將const base* const this轉化為base* const this 這顯然是不允許的,所以cosnt對象不能調用非const的成員函數。
⑵ c++中Const 用法什麼時候需要用const Const放在類成員函數後有什麼用 Con
C++中const用法很多,能完全用好const就能說明C++功底不錯了。
1、const聲明常量,不同於宏定義的是這樣聲明的常量是有數據類型的,這樣編譯器就會在編譯前進行強制類型檢查,盡量減少因數據類型不一致導致的程序錯誤。
2、參數使用const修飾,這種用法是表明並防止函數內部修改了入參,一般用在引用參數和指針參數。調用者不用擔心入參被修改,函數實現者也無法修改該入參。
3、成員函數後面使用const修飾,這種用法表明並防止函數內部修改成員變數,即確保該函數不會修改內部數據成員,僅作為非數據相關的方法。
4、函數返回值前面使用const修飾,表明返回值不能被修改,一般也多用於返回引用或指針時,方式內部成員被外部非法篡改。
5、指針常量聲明時的用法,const char* const p = NULL;第一個const限定指針內容不可修改,第二個const限定指針地址不可修改。
來個例子:
const string& MyClass::Example(const char* const pStr,string& strRes)const
{
...
}
⑶ CONST股票函數,所有可以代替的函數都寫出來。謝謝了。
對不起啊 我不怎麼會函數 我是趨勢技術分析派的 希望您一樣採納我啊!
⑷ const在函數後面是什麼意思
const就是說這個函數操作不會對變數或是對象之類的值有影響 比如你有一個human類 你現在要得到某個human類對象A的age 那麼肯定是不會因為你想得到這個值而改變了age的大小 對吧 那麼你就可以寫一個函數int getAge()const這樣就好 這么做是為了防止你在函數中對不應該在這里改變的量不小心進行了改變。這樣的函數叫常成員函數。常成員函數可以理解為是一個「只讀」函數,它既不能更改數據成員的值,也不能調用那些能引起數據成員值變化的成員函數,只能調用const成員函數。
const修飾說明它是一個常量,它的值是不能被修改的。沒有什麼地方是必須要用的,你只要覺得這個數字你不會改變就可以用。一般在函數傳遞參數中用的比較多,你可以看看C語言的庫函數參數中很多都是用const修飾的。
比如字元串拷貝的聲明函數char *strcpy(char *dest,const char *src); 後邊的形參用了const修飾,在函數定義中src的值就不能被改變,dest的值就可以被改變,也是一種提示的作用說明字元串是從src拷貝到dest中
⑸ 通達信CONST的用法請老師板幫我解釋
N:=10;
N賦值:10
T1:=CONST(HHVBARS(V,N));
T1賦值:N日內成復交量(手)距今天制數的最後一日取值設為常數
T0:=IF(CURRBARSCOUNT<=N+7,CONST(IF(T1=0,C,REF(C,T1))),DRAWNULL);
T0賦值:如果到最後交易的周期<=N+7,返回如果T1=0,返回收盤價,否則返回T1日前的收盤價的最後一日取值設為常數,否則返回無效數
HHVBARS(V,N)<=10 AND CROSS(C>T0,0.5);
N日內成交量(手)距今天數<=10 AND 收盤價>T0上穿0.5
⑹ const 用在函數中是什麼意思
如果是void f(const int a);這種形式的,那麼表示a的值在函數中不能被修改,當然這兒只是個形式,void f(int a);這種方式,a的值也不會被修改。如果是void f(...) const;這種形式,這一般是類的成員 函數 ,表示這個成員函數不會修改類的成員變數,如果有修改成員變數,那麼會編譯錯誤的
⑺ 某個品種在大交易師中是否存在,用什麼函數或方法
method_exists 可以檢查類的復方製法是否存在
bool method_exists ( object object, string method_name )
如果 method_name 所指的方法在 object 所指的對象類中已定義,則返回 TRUE,否則返回 FALSE。
⑻ C++函數中const的用處
const
char*
Point
(int)
const
中
前面的const代表返回的是一個字元指針常量
後面的const代表這個函數不會改變該類中的所屬變數的值,一般我們會在get,print之類不會修改類變數值的函數後面加const
⑼ 通信達CONST在博易大師中可用什麼函數代替
確實在很多方面需要將某一數據固定為常數,
比如下圖的畫線