c++-const成员函数内将该类的数据成员变成const?

问题描述

const成员函数内将该类的数据成员变成const?

#include
using namespace std;
class A
{
public:
void action()
{
cout << "Action in class A!" << endl;
}
};
class B
{
A a;
int s;
public:
void action()
{
cout << "Action in class B!" << endl;
}
A operator->() const
{
return &a;
}
};
class C
{
B b;
public:
void action()
{
cout << "Action in class C!" << endl;
}
B operator->() const
{
return b;
}
};
int main()
{
C *pc = new C;
pc->action();
C c;
c->action();
return 0;
}
在class B中重载->函数被定义为const的。报错说const A
不能转换为A*

解决方案

A operator->() const
{
return &a;
}

修改为:

A* operator->()
{
return &a;
}
时间: 2024-09-25 01:23:18

c++-const成员函数内将该类的数据成员变成const?的相关文章

link中的委托为什么可以调用静态函数?不是说成员函数内不能直接调用静态函数么?

问题描述 link中的委托为什么可以调用静态函数?不是说成员函数内不能直接调用静态函数么? link中的委托为什么可以调用静态函数?不是说成员函数内不能直接调用静态函数么? 解决方案 说反了吧.是静态函数不能调用成员函数. 解决方案二: 你说反了,是静态函数,不能直接调用成员函数

【求助】派生类中的函数访问基类同名数据成员的问题

问题描述 /*2008年5月20日14:28:54派生类中的函数访问基类同名数据成员的问题*/usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace继承_同名覆盖问题{classProgram{classA{publicinta=10;}classB:A{newpublicinta=2;//B类的a"覆盖"了基类的apublicvoidf(){Console.WriteLine(a);//请问如何在本

《C++面向对象高效编程(第2版)》——2.16 识别成员函数的目标对象

2.16 识别成员函数的目标对象 C++面向对象高效编程(第2版)在编写成员函数(构造函数.析构函数.操作符等)的代码时,如何显式表示调用该成员函数的对象?或者,如果需要,如何显式返回目标对象(target object)的值?在成员函数内部,如何访问调用该成员函数的对象中的数据成员? 这就是this指针发挥作用的地方.类的每个成员函数都有一个特殊的指针--this.这个this指针内含调用成员函数的对象的地址(即this指针总是指向目标对象).this指针只在成员函数内部有效,this是C++

怎么实现类的成员函数作为回调函数_C 语言

如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过.其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即"this"指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员.这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员.由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会因为隐含的this指针使得函数参数个数不匹配,从而导致回调函数安装失败.要解决这一问题的关键就

《C++面向对象高效编程(第2版)》——3.7 编译器如何实现const 成员函数

3.7 编译器如何实现const 成员函数 C++面向对象高效编程(第2版)了解编译器如何强制执行逐位常量性(bitwise constantness)非常有趣.记住,成员函数没什么特别,它只是一个带有奇怪名称和this指针的函数.那么,编译器如何能检测到成员的赋值? 这非常简单.数据成员和函数之间唯一的连接就是this指针.const成员函数必须把调用它的对象当做const对象,这可以通过将this指针声明为指向const的指针轻松地做到,很简单.现在来看看带有显式声明this指针的HowMa

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable  成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

成员函数指针与高性能的C++委托 (Member Function Pointers and the Fastest Possible C++ Delegates)

标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托(delegate)")在一些语言中已经证明了它宝贵的价值.在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础.而在目前,C#使"委托"的概念日趋流行,这也正显示出C#这种语言的成功.在很多应用程序中,&qu

实例解析C++中类的成员函数指针_C 语言

C语言的指针相当的灵活方便,但也相当容易出错.许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下.但不可否认的是,指针在C语言中的位置极其重要,也许可以偏激一点的来说:没有指针的C程序不是真正的C程序. 然而C++的指针却常常给我一种束手束脚的感觉.C++比C语言有更严格的静态类型,更加强调类型安全,强调编译时检查.因此,对于C语言中最容易错用的指针,更是不能放过:C++的指针被分成数据指针,数据成员指针,函数指针,成员函数指针,而且不能随便相互转换.而且这些指针的声明格式都不一样:

C++普通函数指针与成员函数指针实例解析_C 语言

C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般函数的函数指针使用的比较多,而对指向类成员函数的函数指针则比较陌生.本文即对C++普通函数指针与成员函数指针进行实例解析. 一.普通函数指针 通常我们所说的函数指针指的是指向一般普通函数的指针.和其他指针一样,函数指针指向某种特定类型,所有被同一指针运用的函数必须具有相同的形参类型和返回类型. int (*pf)(int, int); // 声明函数指针 这里,pf指向的函数类型是int (