社区
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()的呢?
...全文
553
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++
在一个cpp文件中
调用
另一个cpp文件的
函数
的两种方法
有
时
候写代码为了简便,会将一些
函数
方法单独在一个cpp的源文件中定义,然后在另一个源文件中需要用到自定义的
函数
时
直接
调用
就可以了!学过
c++
的人可能最熟悉的方法还是利用头文件来进行
调用
,其实还有一种c语言当中的方法一般情况下同样可以适用与
c++
中! 方法1:创建头文件 举个简单的例子: 首先创建一个method.h头文件,声明一个求最大值的
函数
max(int x,int y),然后再创建一个同名的源文件method.cpp,在该文件中实现
函数
max(int x,int y)的功能。代码如下: //metho
C++
一个
函数
调用
其他.cpp文件中的
函数
使用VC或VS创建
C++
项目的
时
候,会自动产生许多文件夹,其中有一个文件夹->源文件: 在该文件下可以自定义许多.cpp文件,但是需要注意的是这里面的各个文件只能有一个文件中含有main()
函数
, 而且各个文件中不能使用相同的
函数
名进行定义; 那么要那么多文件放在项目中有什么用呢? 当然这里
C++
是提供一个文件
调用
其他文件中
函数
的功能的, 这就可以让我们自定义一个只包含main()...
c++
面向
对象
-
类
的
函数
调用
(一)
调用
类
中的
函数
写法 test1.h的头文件 #include<iostream> using namespace std; class test1 { public: int sumFunc(int x, int y); private: }; test1.cpp的内容 #include "test1.h" int test1::sumFunc(int x, int y) { return x + y; } 其他
函数
调用
时
: test1 *a = new test1(); cout &l
【
c++
】cpp
类
和
对象
c++
中
类
和
对象
基本用法
【Cpp】
类
和
对象
类
的认识,
类
和
对象
(一)
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章