外贸推广的网站,大浪网,商务,网站后台界面 园林设计今天复习C Primer的时候#xff0c;看到了关于C类的内联成员函数的放置#xff0c;应该放在头文件中。那么这到底是为什么 呢#xff1f;仅仅是一种代码规范问题还是必须这样做呢#xff1f; 下面我就来讲讲我自己的理解吧。要彻底理解这个问题#xff0c;首先就要了解下函… 今天复习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) (?printtestQAEXXZ)该符号在函 数 _main 中被引用。如果我将测试函数改为
int main()
{test T;T.display(10);//T.print();system(pause);return 0;
}那么运行结果正常。从此可以得出结论内联函数放在头文件或者.cpp中都是没有错的但如果我们需要在程序中访问它那么就必须将其放在头文件中。 转载自《C类的内联成员函数应放在哪 》