社区
C++ 语言
帖子详情
C++类/对象调用时是怎么找到函数的?
cdwy411
2004-10-15 09:43:53
有如下一个测试程序:
class CTest
{
public:
long fromsubtype;
long tosubtype ;
CE2eRule(){}
~CE2eRule(){};
long print() {}
} ;
void main()
{
CTest test
cout<<sizeof(test)<<endl;
}
程序输出的结果为8 ,可见类中并没有什么东西记住函数,可是类或对象怎么找到函数
print()的呢?
...全文
542
17
打赏
收藏
C++类/对象调用时是怎么找到函数的?
有如下一个测试程序: class CTest { public: long fromsubtype; long tosubtype ; CE2eRule(){} ~CE2eRule(){}; long print() {} } ; void main() { CTest test cout<<sizeof(test)<<endl; } 程序输出的结果为8 ,可见类中并没有什么东西记住函数,可是类或对象怎么找到函数 print()的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
星羽
2004-10-17
打赏
举报
回复
说反了,是函数找到对象,而非对象找到函数。
函数通过this指针确定当前所操作的是那个对象。
apogeecsj
2004-10-17
打赏
举报
回复
类的成员函数事实上在编译后都换了名字,如CTest类的print可能转换为:CTEST_@_print_long,
这样同普通C语言函数调用一样
elvahuang
2004-10-16
打赏
举报
回复
对象中当然不会存放函数的啊 函数是对每个对象都是有效的啦 否则 冗余
成员函数的定义会被编译成全局函数的 对象.成员函数会被编译成访问其对应的成员函数
Ji秋风
2004-10-16
打赏
举报
回复
long print() {}
等价于
long print(CTest *) {}
这样去理解应该没问题了吧。这就是this指针的一个作用。
greenteanet
2004-10-16
打赏
举报
回复
你可以看看<<高质量程序设计---C++/C语言>>(第二版)里面有很详细的说明.
umbrella1984
2004-10-15
打赏
举报
回复
调用对象的任何东西都会隐含传进一个this指针~
sharkhuang
2004-10-15
打赏
举报
回复
取个全局名字。就和c调用一样
Poville
2004-10-15
打赏
举报
回复
这是编译问题。
freefalcon
2004-10-15
打赏
举报
回复
你写这样的代码
CTest test;
test.print();
编译器在内部将转换为:(伪代码)
CTest test;
CTest_print( &test ); // CTest的print函数转换为:CTest_print( CTest* const this);
所以这就和普通函数调用差别不大了
晨星
2004-10-15
打赏
举报
回复
当在对象上调用一个成员函数,编译器受先根据对象的类型确认调用的是哪个函数,然后把这个对象的地址作为this指针传给那个函数。
晨星
2004-10-15
打赏
举报
回复
this指针是类的非静态成员函数的一个隐含参数。
晨星
2004-10-15
打赏
举报
回复
说反了,是函数找到对象,而非对象找到函数。
函数通过this指针确定当前所操作的是那个对象。
hhch2004
2004-10-15
打赏
举报
回复
这个程序输出对象test占用的内存,它用cout输出,不是用print()输出的
cablist
2004-10-15
打赏
举报
回复
在一个对象中只存放了成员变量
成员方法是通过调用执行的
cdwy411
2004-10-15
打赏
举报
回复
我就是想知道函数在内存里放在哪儿,站用多少内存,调用时怎么找到并执行的???
greenteanet
2004-10-15
打赏
举报
回复
在编译时,编译器会给每个函数一个名字(那是已经处理过的)正如 freefalcon说的。其实内部把函数的指针放到某一个数组里面,它占用了一定的内存,里面都是放成员函数的指针等,然后就可以从中调用函数了,可能我说的不是很清楚,大家见谅。有什么错误,请指正。
wangwencong
2004-10-15
打赏
举报
回复
当你如此是CTest x;时暗中定义一个this指针,指向x;当你调用CTest内部函数时,编译器暗中将this作为参数传入函数中。这样函数就知道具体处理的是那个对象了。
C++
编程实例100篇
C++
编程实例100篇,里面有很多很基础的编程实例,可以作为参考。
c++
对象
调用
函数
的流程
日常学习中的发现:
C++
中
调用
虚成员
函数
的流程是:
调用
对象
obj中的vptr,获取指针指向的虚
函数
表,再通过位移操作
找到
虚
函数
表中特定
函数
的地址
调用
。这个obj必须被初始化,因为
调用
该
对象
内部的vptr的
时
候 发现为初始化是会报错的 `
c++
中
调用
非静态成员
函数
的流程是: 在编译
时
期,编译器就完成对
函数
代码的解析,并获取到相应的
函数
代码,再通过一定的命名规则(name mangling)保存。 所以
对象
在
调用
某成员
函数
的
时
候例如: obj.someone();的
时
候 首先通过someone 这个
函数
C++
可
调用
对象
总结(一)
函数
对象
基本概念 ①.
调用
运算符 即:() 。跟随在
函数
名之后的一对括号 “()”,起到
调用
函数
的效果,传递给
函数
的实参放置在括号内。 ②.谓词 是一个可
调用
表达式,其返回结果是一个能用作条件的值。根据可接收的参数分为一元谓词和二元谓词;接收谓词参数的算法对输入序列中的每个元素
调用
谓词。 ③.可
调用
对象
对于一个
对象
或者一个表达式,如果可以对其使用
调用
运算符,则称为可
调用
对象
。 ④.
调用
形式 一种
调用
形式对应了一个
函数
类
型,指明了
调用
返回
类
型以及传递的参数
类
型,比如:int (int,int) 。
函数
对象
定
C++
:
函数
对象
与
函数
指针
文章目录一、
函数
对象
与
函数
指针二、使用实例 一、
函数
对象
与
函数
指针
函数
对象
: 拥有()operator重载
函数
的
对象
即
函数
对象
,
函数
对象
类
似C语言里面的
函数
指针,但在
C++
里为
函数
对象
。 问题一:什么是
函数
对象
呢? 例如:我们C语言进行
函数
调用
与
C++
中两个
函数
调用
。 看起来它们好像一模一样,但是C语言中的su...
C++
怎么
调用
类
中的
函数
在
C++
中,可以通过创建
类
的
对象
来
调用
类
中的
函数
。
C++ 语言
65,209
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章