const修饰函数】的更多相关文章

const修饰函数 在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数.为什么不能调用非const函数?因为非const函数可能修改数据成员,const成员函数是不能修改数据成员的,所以在const成员函数内只能调用const函数. #include <iostream> using namespace std; class A{ private: int i; public: void set(int n){ //set函数需要设置i的值,所…
At the very first ,I got a problem . Vector Vector::operator+(const Vector &v)const{ return Vector(x+v.val_x() ,y+v.val_y());//at the very fisrt, I didn't add const to the //implemention of val_x()function,so i got an error.you should not call an unc…
#include <iostream> using namespace std; class A { public: A(int age); void printAge() const; // 这是个常成员函数,绝不可以修改成员变量:age和name // 常成员函数只能对成员变量进行读操作 // 通常把get...()等定义为常成员函数 void eat(); private: int age; char name; }; A::A(int age) { this->age = age…
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为引用传递或者指针传递作为输出时,都不能加const 二.用const修饰函数的返回值 函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定. "值传递"加const修饰没有任何价值. "址传递"加const修饰,函数返回值只能被赋给加cons…
1.如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针指向的内存单元,起到保护的作用. 例如:void StringCopy(char *strDest, const char *strSrc);   void OutPutString(const char *str); 2.如果输入参数采用“值传递”,由于函数将自动用实参的拷贝初始化形参,因此即使在函数内部修改了该参数,改变的也只是堆栈上的拷贝而不是实参,所以一般认为不需要用const 修饰. 对于ADT/UDT的参…
const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地…
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 const…
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 const 修饰符而言,它用来告诉编译器,被修饰的这些东…
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一枚,难免出错,还望各位大牛不吝赐教. 首先,来看看const的基本含义.在 C/C++ 语言中,const关键字是一种修饰符.所…
const指针和指向const变量的指针,在写法上容易让人混淆,记住一个规则:从左至右,依次结合,const就近结合. 比如,int * const p: 1.int * (const p):变量p经过Const修饰,为只读变量 2.int (*(const p)):(const p)作为一个整体成为一个只读指针指向int型变量 3.(int(*(const p))):(*const p)作为一个整体,只读指针p指向Int型变量 于是,int * const p:一个指向整型变量的Const型指…
const在函数前与函数后的区别 一   const基础           如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:           int   b   =   500;      const   int*   a   =   &b;              [1]      int   const   *a   =   &b;              [2]      int*   const   a   =   &b;         …
const取自constant的缩写,本意是不变的,不易改变的意思 一.修饰普通变量 const int a = 7; int b = a;         //正确 a = 8;             // 错误,不能赋值 二.修饰指针 int b = 500;const int* a = &b;                      int const *a = &b;                   这两种一样的,const修饰的是*a ,无法修改*a的值,*a指的其实是b…
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和const修饰类的成员函数? 分析:答案是不可以.C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*.但当一个成员为static的时候,该函数是没有this指针的.也就是说此时static的用法和static是冲突的. 我们…
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostream> 02   03 using namespace std; 04   05 // Ahthor:  过往记忆 06 // E-mail:  wyphao.2007@163.com 07 // Blog:    http://www.iteblog.com 08 // 转载请注明出处 09   1…
[1]程序1 #include <iostream> using namespace std; class Base { public: ; }; class Test : public Base { public: void print(); }; void Test::print() { cout << "Test::print()" << endl; } void main() { // Base* pChild = new Test(); /…
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前面的时候修饰的是函数返回值. 当const在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作. 二.原理: 我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变thi…
比如QString有两个函数,可以堂而皇之的存在,原因就在于有了const修饰以后,编译器不把两个函数当作同一个函数名了: QChar * data() const QChar * data() const http://doc.qt.io/qt-5/qstring.html#data https://github.com/qtproject/qtbase/blob/dev/src/corelib/tools/qstring.h…
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> using namespace std; class Base{ private: int x; char *p; public: Base(void){ x=; p=()); strcpy(p,"); } void Set_x(int tx){ x=tx…
class class UIRect:public RECT { public: UIRect(LONG leftT = 0, LONG topT = 0, LONG rightT = 0, LONG bottomT = 0) { left = leftT; top = topT; right = rightT; bottom = bottomT; } int GetWidth() const { return right - left; } int GetHeight() const { re…
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究…
博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include<iostream> using namespace std; class TestClass { public: size_t length() const; const char* getPContent(); void setLengthValid(bool isLengthValid); pri…
目录 const在函数后面 const修饰成员函数的两个作用 const在函数前面 总结 const在函数后面 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. const修饰成员函数的两个作用 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const.所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在…
1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截取适当的长度保存,安全 如果输入的长度大于数组的长度,自动将数组最后一个元素保存为\0 如果输入的长度小于数组的长度,会自动先保存\n,再保存\0   使用格式:fgets(ch,sizeof(ch),stdin); 输出字符串的方法: 1) printf() %s   缺点:不能自动换行 2) p…
1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象 单个对象创建时构造函数的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的构造函数 析构函数与对应的构造函数的调用顺序相反 多个对象 多个对象时,析构函数与构造顺序相反 eg:这端代码就可以解释上述 #include <stdio.h> class Member { const char *ms; //这里是const指针 public: Member(const ch…
const 限定只读,对函数的实参进行保护 常数据成员:必须出现在类的定义体中,常数据成员必须进行初始化,并且不能被更新,但常数据成员的初始化只能通过构造函数的初始化列表进行 1. 常函数 成员函数加const 后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字 mutable 后,在常函数中依然可以修改 2. 常对象 声明对象前加 const 称该对象为常对象 常对象只能调用常函数,常对象只能调用它的成员函数,不能调用其他成员函数,只有常成员函数才有资格操作常量或常…
4. 封装 4.1.1 封装的意义 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 const double PI = 3.14; 6 7 //设计一个圆类,求圆的周长 8 //周长公式:2*PI*半径 9 10 class Circle { 11 //公共权限 12 public: 13 // 属性 14 int m_r; 15 16 //行为,一般为函数 17 double calZC() {…
声明一个成员函数的时候用const关键字是用来说明这个函数是 "只读(read-only)"函数,也就是说明这个函数不会修改任何数据成员(object). 为了声明一个const成员函数, 把const关键字放在函数括号的后面.声明和定义的时候都应该放const关键字. 任何不会修改数据成员的函数都应该声明为const类型.如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性. #include<ios…
第一个事实: 某类中可以这么声明定义两个函数,可以重载(overload) void pa(){ cout<<"a"<<endl; } void pa() const{ cout<<"b"<<endl; } 上面的写法是正确的. 基于这个事实,我思考了一下它的机制. 试验得出, 第二个事实: 普通函数(不是类的成员函数),可以这样来重载(overload): void fun(const int &a) { c…
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存…
const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const char b = 'k'; const float c = 3.14f; //a = 2; //b = 'n'; //c = 1.2f; } const修饰基本类型表示这些类型为常量,不能再修改或赋值.还有需要注意的是3.14默认为double类型,如果用float变量保存的话应该写成float c = 3.14f…