在同个类中non-const插入const来减少重复

class A
{
private:
    std::string a;
public:
    A(std::string b) :a(b){}
    const char& operator[](int b)const
    {
        std::cout << "const"<<std::endl;
        return a[b];
    }
    char& operator[](int b)
    {
        std::cout << "non-const" << std::endl;
        return
            const_cast<char &>                         //分两部分,一部分是消掉const          (static_cast<const A&>(*this)[b]);      //这部分是使得non-const函数的代码可以使用const的代码,以减少重复操作。
    }
};
时间: 2024-11-03 21:18:53

在同个类中non-const插入const来减少重复的相关文章

C++类中的static和const

本文列举C++类中的static和const的规则和用法. 以下代码用来举例说明. class A { public: A():m(10) //const成员必须在构造函数的初始化构造列表中初始化 { q = 40; } void fun1()const { m++; //错误.const成员是常量,不能改变其值. n++; //正确.static变量n属于类,但是每个对象的函数都可以访问和改变它. q++; //错误.const成员函数不能改变数据成员的值. } static void fun

静态修饰符static,类中的常量定义修饰符

static可以用来区分成员变量.方法是属于类本身还是属于类实例化后的对象.有static修饰的成员属于类本身,没有static修饰的成员属于类的实例. 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失static是一个修饰符,用于修饰成员(成员变量和成员函数)静态成员随着类的加载而加载.静态成员优先于对象存在.静态成员被所有对象所共享静态成员多了一个中调用方式,可以被类名直接调用.静态的优缺点优点: 静态成员多了一种调用方式.可以直接被类名调用 格式 :类名.静态成员.也

C++ 类中的const关键字

//类中的const关键字 #include<iostream> using namespace std; class Point{ public: //这个const关键字本质上修饰的是this指针 int GetX() const //====>int GetX(const this) { //因为this被隐藏,所以const关键字只好写在函数后面 //x++; //加上const关键字 报错 error C3490: 由于正在通过常量对象访问“x”,因此无法对其进行修改 //这个

C++类中const一些用法

在类中的const基本有三种用法 const int func(); // 返回值是const类型 int func(const int); // 参数为const类型 int func(int )const; // 为const类型的成员函数,只能调用类中const类型的变量: 另外,当类的实例是const类型时,也只能调用类中的const成员函数,且只有类的成员函数才能被修饰为const类型: //Point.h #include <iostream> using namespace st

php类中的$this,static,const,self这几个关键字使用方法

本篇文章主要分享一下关于php类中的$this,static,final,const,self这几个关键字使用方法 $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如:$this->属性,$this->方法 <?php /** * 有关人类 */ class Person { private $name='张三'; public $sex; public funct

php面向对象类中的$this,static,final,const,self这几个关键字使用方法。

php中this,self,parent三个关键字的作用 this,self,parent三个关键字之间的区别,从字面上比较好理解,分别是指这.自己.父亲.我们先建立几个概念,这三个关键字分别是用在什么 地方呢?我们初步解释一下,this是指向当前对象的指针(姑且用C里面的指针来看吧),self是指向当前类的指针,parent是指向父类的指针.我 们这里频繁使用指针来描述,可能是因为没有更好的语言来表达. <?php <span style="color:#ff0000;"

C++类中const的用法

C++ 类中的const用法总结: 先看一个例子: class A { public: A(int x) : num(x), b(x) {} void fun(const A& a); //const修饰函数形参 int GetNum(void) const;//const修饰不修改成员变量的函数 void SetNum(int x); A& operator=(const A& other);  //const修改成员函数的返回值和形式参数 const A operator*(c

类中函数

[1]空类为什么可以创建对象呢? 示例代码如下: 1 class Test 2 { 3 }; 4 void main() 5 { 6 Test t1; 7 cout<<sizeof(Test)<<endl; //1 8 } 让我们先看看这个例子.既然都没有构造函数,怎么实现对象t1的构建呢? 哦,经过大脑的回旋式搜索,忆得有一本书上说过,当用户定义一个空类(如上)时,编译器就会为这个类默认生成六个方法. 既然这是编译器完成的工作,那我们只要知道是那些方法就好了,其余就学习编译器的结

C++程序设计方法3:类中的静态成员

在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为"类的变量" 静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置) 静态数据要在实现文件中赋初值,格式为: Type ClassName::static_var = Value; 返回值类型前面加static修饰的成员函数,称为静态成员函数,它们不能调用非静态成员函数: 类的静态成员(数据,函数)既可以通过对象来访问,也可以通过类名字类访问: #include <io

C++中 容易忽视的const 修饰符

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存