const和非const函数重载】的更多相关文章

成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: #include <stdio.h> class A { private: mutable int aa; public: A(){} int x() { printf("no const\n"); return aa++; } int x() const { printf("const\n"); return aa++; } }; int main() { A a1;…
我们从一个例子说起,来看上一篇文章中的String类, 我们为它提供一个下标操作符([ ])以读写指定位置的字符(char). 只要了解过C++的操作符重载的语法,很快就可以写出下面这个[]操作符重载函数:char& operator[](int posion)    // function_1 {      return data[posion]; };注意,这里该函数的返回值为一个引用,否则str[0] = 'c'这样的语句就会不合法,因为str[0]将是一个左值. 那么,是否提供这样一个f…
(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,char c='a'){ } int fun(int i){ } int main(){ int i fun(i);//此时函数重载和函数默认参数就会出现问题,此时不知道具体调用的是哪一个函数 fun(i,'b');//这样调用就不会出现错误,此时明确知道调用的是哪一个函数 //出现上述重载函数时,int…
Static_cast可以对对象也可以对指针也可以对引用,但是const_cast只可以对指针和引用使用,后者不可以对对象用,如果你要把一个const值转化为非const值只能用隐式执行或通过使用static_cast.C 样式转换或函数样式转换执行. 比如: const int aa = 10; //int bb = const_cast<int>(aa);错误 int bb = int(aa);//传统的c转化方式 int bb = static_cast<int>(aa);/…
下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,len    bool operator <(const node &a)const {//重载<操作符.可以对两个node使用<操作符进行比较        return len<a.len;    } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用…
前言 函数重载在C++中是一个很重要的特性.之所以有了它才有了操作符重载.iostream.函数子.函数适配器.智能指针等非常有用的东西. 平常在实际的应用中多半要么是模板函数与模板函数重载,或者是非模板函数与非模板重载.而让模板函数与非模板函数重载的情况却很少. 前段时间在项目中偶然遇到了一个模板函数与非模板函数重载的诡异问题,大概相当于下面这种情况: template <typename T> int compare(const T& lhs, const T& rhs)…
在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的: const  int  n=3; 则这个变量的值不能被修改,即不能对变量赋值. const 这个关键字经常出现在函数的定义中,而且会出现在不同的位置,比如: int  strcmp (const   char  *str1,const    char  *str2); const    int  & min (int  &, int  &); void  printMessage (c…
昨天,看了一点<c++ primer>和<程序员的自我修养>,想起了自己以前的两个知识点,这里回顾,并且总结一下. 1. const指针的参数 看primer的时候,看到几个概念,虽然都大概知道,但是还是有点模糊的,今天权且记在这里. (1)const形参 const形参,从const的意思来看,就是形参是const的,不能够改变.但是函数在传值的时候都是传的副本,所以不管形参是不是const,都可以使用const或者非const的实参传递.[注:这里指的是普通的形参] (2)co…
在面对C++模板的时候,需要十分注意,因为模板的复杂性有很多情况,所以最好学习模板的方法我个人认为就是用到就去学,用不到就尽量别去看各种奇门怪技,因为你就算看了,好不容易搞懂模板的实现内部了,包括元编程啊什么的,但真正用到工作中的我相信很少,不久你也会忘掉,所以,对于模板,我们可以采取用到哪学到哪的观念去学习,这样可以节省时间并且让效率最大化. 今天主要讲在关于模板特化已经函数重载的问题,简单举下例子 1 void say(int value); 2 template <typename T>…
函数重载: 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数(overloaded function).一定要注意函数重载的两个关键词:形参列表和作用域. 任何程序有且仅有一个main函数的实例,main函数不能重载. 对于函数重载来说,它们应该在形参数量和形参类型上有所不同. 下面论述形参列表和作用域对函数重载的影响. 函数重载与形参列表 函数重载和函数声明的区别: 如果两个函数声明的返回类型和形参表完全匹配,则将第二个声明视为第一个的重复声明. 如果两个函数的形参…