C++类的内联成员函数应放在哪
来源:互联网 发布:mac应用程序放到桌面 编辑:程序博客网 时间:2024/04/29 01:58
今天复习C++ Primer的时候,看到了关于C++类的内联成员函数的放置,应该放在头文件中。那么这到底是为什么
呢?仅仅是一种代码规范问题还是必须这样做呢?
下面我就来讲讲我自己的理解吧。要彻底理解这个问题,首先就要了解下函数的声明和定义了。我们知道,函数可以
在多处声明,但只能在一个地方定义,不然就会出现重定义。大部分函数默认是外部链接,而inline函数默认为内部链
接。也就是说inline函数只能在本文件中使用,对其他文件是不可见的。一般我们使用某个类的时候,都是在文件中加
上该类的头文件,以便我们可以使用该类的接口。而我们类的成员函数的实现都是放在相应的.cpp文件中的,而在.h
文件中声明。这样我们便可以通过.h文件中的成员函数的声明找到其定义,继而使用成员函数了。但如果将inline函数
放在.cpp文件中,那么其只对.cpp文件有效,这样我们就无法访问它了。所以我们将其放在类的声明的头文件中,这
样通过包含该头文件来使用它。
下面写个实际的例子来说明一下,我先把内联函数放到类声明的头文件中:
/*test.h*/#ifndef TEST_H#define TEST_H#include <iostream>using std::cout;using std::endl;class test{public:test():x(10){}inline void print();void display (int y);private:int x;};void test::print(){cout << x << endl;}#endif
/*test.cpp*/#include <iostream>#include "test.h"using std::cout;using std::endl;void test::display(int y){cout << x * y << endl;}
运行结果正常,下面来看看将内联函数放到.cpp中去:
/*test.h*/#ifndef TEST_H#define TEST_H#include <iostream>using std::cout;using std::endl;class test{public:test():x(10){}inline void print();void display (int y);private:int x;};#endif
/*test.cpp*/#include <iostream>#include "test.h"using std::cout;using std::endl;void test::print(){cout << x << endl;}void test::display(int y){cout << x * y << endl;}
测试函数和上面的main.cpp是一样的。这是出现了错误:
error LNK2019: 无法解析的外部符号 "public: void __thiscall test::print(void)" (?print@test@@QAEXXZ),该符号在函
数 _main 中被引用。如果我将测试函数改为:
int main(){test T;T.display(10);//T.print();system("pause");return 0;}
那么运行结果正常。从此可以得出结论:内联函数放在头文件或者.cpp中都是没有错的,但如果我们需要在程序中访
问它,那么就必须将其放在头文件中。
C++类的内联成员函数应放在哪
》 0 0
- C++类的内联成员函数应放在哪
- C++类的内联成员函数应放在哪
- 浅谈C++类的内联成员函数应放在那个文件
- C++类的内联成员函数在哪定义
- 类的内联函数的实现应该放在哪里
- 类的内联函数的实现应该放在哪里
- C++:在成员函数后面放const的作用
- const 只能放在类成员函数的后面
- C++ 类的成员函数:内联函数与外联函数
- 关于“在内联汇编中不能调用类的成员函数“的误解
- 内联成员函数时钟类
- 函数模板和类模板成员函数的定义通常放在头文件中
- C++类里面的哪些成员函数是内联函数?
- 类内定义的成员函数是内联函数
- 类中成员函数的实现,放在类块里和外部实现的区别
- 类中成员函数的实现,放在类块里和外部实现的区别
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 模板类成员函数的定义和声明为什么要放在一个文件中
- wgs84转gcj02
- 什么是面向对象思想?
- 操作系统分类
- java虚拟机分析-字节码解析
- 让shell脚本在后台飞
- C++类的内联成员函数应放在哪
- Chess
- CodeForces 44B 思维题,防TLE
- Android中的各种XML
- HDU 5500:Reorder the Books【规律】
- android布局第一练
- UnityEditor中新建一个窗口,在Hierarchy中点击一个GameObject时,窗口中就显示相应的GameObject名称和Position
- Android基础——ContentProvider使用
- 《剑指offer》——复杂链表的复制