打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++成员函数实现在类定义中与在类定义外的区别

在上篇文章《inline的另一用处》中,提到函数实现在类定义中与类定义外的区别。

现在先看个实验:

a.cpp:

1#ifndef TEST_H
2#define TEST_H
3class A{
4public:
5int fun(int x){
6return (x*x+1000);
7}
8};
9#endif
10
11void tt()
12{
13}

b.cpp:

1class A{
2public:
3int fun(int x);
4};
5void tt();
6int yy()
7{
8tt();
9A a;
10return a.fun(3);
11}

将它们分别编译后再链接:


显示链接错误,因为b.cpp(b.o)中找不到A::fun(int)的引用。

将以上的a.cpp改为如下所示:

1#ifndef TEST_H
2#define TEST_H
3class A{
4public:
5int fun(int x);
6};
7#endif
8int A::fun(int x){
9return (x*x+1000);
10}
11void tt()
12{
13}


分别编译a.cpp和b.cpp为a.o和b.o后链接,显示链接成功。

这样,第一次链接错误的原因就很明显了。

结论:在类定义中的类成员函数实现有文件内部作用域,而在类定义外部的类实现有的是全局作用域。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
类中的static成员对象,调用时显示未定义
交叉继承派生类中成员引用.cpp
inline函数必须在头文件中定义吗?
模板函数的定义和声明须在同一文件内
扫盲贴--模板函数、函数模板,模板类、类模板的区别
探索C++对象模型
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服