⑴ 什么是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在博易大师中可用什么函数代替
确实在很多方面需要将某一数据固定为常数,
比如下图的画线