C++中的隐式参数是什么?

振翅高飞 2009-05-30 09:12:07
我最近在学习《Big C++》中文版 原著Cay Horstmann和Timothy Budd 姚爱红 张国印 李健利译
有个问题想像高手请教:
一个类由构造函数(特殊的成员函数),成员函数,数据域组成。
该书给出的定义模式如下:
class 类名
{
public:
    构造函数声明
    成员函数声明
private:
数据域
};
而成员函数又分访问型成员函数和变异型成员函数。
访问型成员函数不修改调用该成员函数的对象的数据域,而变异型成员函数修改调用该成员函数的对象的数据域。
访问成员函数,书中说尽量加const尾缀关键字。
成员函数不涉及任何它所操作的对象。该对象称为成员函数的隐式参数。相比之下,在成员函数定义中明确提到的函数称为显式参数,每个成员函数中都有且只有一个隐式参数,可以有一个或者多个显式参数。这是什么意思?
希望高手不厌赐教。
...全文
349 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
adventurelw 2009-05-30
  • 打赏
  • 举报
回复
说得就是this指针吧,不明白什么书需要用这样拗口的方式来表达。
hz_yck 2009-05-30
  • 打赏
  • 举报
回复
就是说每个成员函数都有一个指向自己的名叫this的指针,这个指针不再形参表中出现,成员函数中所有对起所在类数据的访问都省略了this->。


而成员函数又分访问型成员函数和变异型成员函数。
访问型成员函数不修改调用该成员函数的对象的数据域,而变异型成员函数修改调用该成员函数的对象的数据域。

就是改不改变类中数据成员的区别,也就是this指针是不是const的区别;


访问成员函数,书中说尽量加const尾缀关键字。

指出this指针是const的。


成员函数不涉及任何它所操作的对象。该对象称为成员函数的隐式参数。相比之下,在成员函数定义中明确提到的函数称为显式参数,每个成员函数中都有且只有一个隐式参数,可以有一个或者多个显式参数。

this指针不出现在形参表中。


比如说

class MyClass{
public:
MyClass(int data):mData(data){} //构造函数
int getData() const { //指出this指针为const指针,也就是数据域的值(这里只有int mData)不可变
return mData; //这个是this->mData的缩写,也可以用this->mData显示指出
}
private:
int mData;
};

int main(){
MyClass mc(2);
mc.getData(); //this指针就是&mc
return 0;
}

pengzhixi 2009-05-30
  • 打赏
  • 举报
回复
this指针
lingyin55 2009-05-30
  • 打赏
  • 举报
回复
应该就是说this指针,除此之外只有默认参数,但是那个不叫隐式。

[Quote=引用 2 楼 ltc_mouse 的回复:]
感觉说的像是this指针...
[/Quote]
lingyin55 2009-05-30
  • 打赏
  • 举报
回复
这里说的其实就是指this指针。
普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。
这也可以理解为什么C++类的多个实例可以共享成员函数但是确有不同的数据成员。

一个类如果定义了多个对象,那么这些对象是共享类中的一份成员函数,
而如何区分哪个类调用了类中的成员函数,就是通过this指针。
ltc_mouse 2009-05-30
  • 打赏
  • 举报
回复
感觉说的像是this指针...
振翅高飞 2009-05-30
  • 打赏
  • 举报
回复
希望回答的高手给与示例说明一下。谢谢。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧