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

来源:互联网 发布:医疗大数据面临的问题 编辑:程序博客网 时间:2024/06/09 22:49

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

    现在先看个实验:

    a.cpp:

   

#ifndef TEST_H#define TEST_Hclass A{public:int fun(int x){return (x*x+1000);}};#endifvoid tt(){}


b.cpp:

class A{public:int fun(int x);};void tt();  int yy()  {      tt(); A a;return a.fun(3);  }

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

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

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

#ifndef TEST_H#define TEST_Hclass A{public:int fun(int x);};#endifint A::fun(int x){return (x*x+1000);}void tt(){}


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

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

    结论:

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

原创粉丝点击