8.3.2 在类定义的外部定义成员函数

    在类定义的外部定义成员函数时,应使用作用域操作符(:)来标识函数所属的类,即有如下形式。


    返回类型类名:成员函数名(参数列表) { 函数体 }

    其中,返回类型、成员函数名和参数列表必须与类定义时的函数原型一致,这样,代码8.2可改写为代码8.3。

    代码8.3 在类定义之外定义成员函数DefineAndImplement2


    <————————————-文件名:example803.h———————————————-> 01 class computer//类定义,起到接口作用 02 { 03 private: 04 char brand[20]; 05 float price; 06 public: 07 void print();//3个public成员函数的原型声明 08 void SetBrand(char*sz); 09 void SetPrice(float pr); 10 }; <———————————-文件名:example803.cpp———————————————-> 11 #include"example803.h"//包含computer类定义 12 #include<iostream> 13 #include<cstring> 14 using namespace std; 15 void computer:print()//成员函数的实现,注意作用域操作符的使用 16 { 17 cout<<"品牌:"<<brand<<endl; 18 cout<<"价格:"<<price<<endl; 19 } 20 void computer:SetBrand(char*sz) 21 { 22 strcpy(brand,sz);//字符串复制 23 } 24 void computer:SetPrice(float pr) 25 { 26 price=pr; 27 }

    【代码解析】由代码第15~27行可以看出,为方便项目的组织管理,常将类的定义放在头文件(h文件)中,而将类的实现放在同名的cpp文件中,这样,只要使用#include命令将类定义的头文件包含进来即可使用定义好的类,但这并非是强制性的,应确保其在本编译单元内,在使用某个类前,该类已经定义。关于编译单元的相关内容,请参考第20章的内容。

    将成员函数定义在类定义之外时,在返回值类型前使用关键字inline,同样可使成员函数称为内联函数。需要注意的是,此时类定义和inline函数必须在同一文件中。