在编写 C++ 项目时,经常会把整个项目分为多个文件来编写,每个文件作为一个独立的函数模块。
对于类的定义可将其放在头文件(例如:MyHeader.h)中,而在其他的每个文件中直接 #include “MyHeader.h” 即可。

例如:

// MyHeader.h
#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>using namespace std;struct sample {int int_id;vector <double> vecDou_attribute;int int_type;
};class totalData {public:void Void_rawData_read ( int int_attributeNum, char chaArr_filePath[] );void temp();private:vector <struct sample> vecStc_rawData;vector <struct sample> vecStc_trainData;vector <struct sample> vecStc_validateData;vector <struct sample> vecStc_testData;
};

上述代码中并没有定义类中的函数,如果要在类的外部使用范围解析运算符 :: 定义该函数的话,则函数定义不能写在头文件中。
如果将类的成员函数定义写在了头文件中,则当在其他文件中 include 头文件时,会出现重复定义函数的错误。

示例

// MyHeader.h
#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>using namespace std;struct sample {int int_id;vector <double> vecDou_attribute;int int_type;
};class totalData {public:void Void_rawData_read ( int int_attributeNum, char chaArr_filePath[] );void temp();private:vector <struct sample> vecStc_rawData;vector <struct sample> vecStc_trainData;vector <struct sample> vecStc_validateData;vector <struct sample> vecStc_testData;
};void totalData::Void_rawData_read( int int_attributeNum, char chaArr_filePath[] )
{ifstream ifstream_myfile ( chaArr_filePath );if ( !ifstream_myfile.is_open() ) {cout << "未成功打开文件!" << endl;exit;}else {string str_currentLine;getline( ifstream_myfile, str_currentLine );        // 读取第一行属性名称,不做处理while ( getline( ifstream_myfile, str_currentLine ) ) {cout << str_currentLine << endl;}}return;
}void totalData::temp()
{for ( int i=0; i<100; i++ )cout << i << "\t";return;
}
// main 函数
#include "MyHeader.h"int main()
{totalData a1;a1.temp();return 0;
}

这样会报错说函数重复定义。

正确做法:

头文件中只定义类

// MyHeader.h
#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>using namespace std;struct sample {int int_id;vector <double> vecDou_attribute;int int_type;
};class totalData {public:void Void_rawData_read ( int int_attributeNum, char chaArr_filePath[] );void temp();private:vector <struct sample> vecStc_rawData;vector <struct sample> vecStc_trainData;vector <struct sample> vecStc_validateData;vector <struct sample> vecStc_testData;
};

在其他文件中定义类的成员函数:

#include "MyHeader.h"void totalData::Void_rawData_read( int int_attributeNum, char chaArr_filePath[] )
{ifstream ifstream_myfile ( chaArr_filePath );if ( !ifstream_myfile.is_open() ) {cout << "未成功打开文件!" << endl;exit;}else {string str_currentLine;getline( ifstream_myfile, str_currentLine );        // 读取第一行属性名称,不做处理while ( getline( ifstream_myfile, str_currentLine ) ) {cout << str_currentLine << endl;}}return;
}void totalData::temp()
{for ( int i=0; i<100; i++ )cout << i << "\t";return;
}int main()
{totalData a1;a1.temp();return 0;
}

程序可正确运行:

C++ 类 :类成员函数定义相关推荐

  1. 10.2.1 关于vc++不支持把类的成员函数定义为类的友元函数的处理

    •说明:有的C++编译系统(如Visual C++ 6.0)没有完全实现C++标准,它所提供不带后缀.h的头文件不支持把成员函数重载为友元函数.但是VisualC++所提供的老形式的带后缀.h的头文件 ...

  2. C++学习笔记:类的成员函数的声明与定义

    今天学习一下类的成员函数,首先讲一下常规的类外的函数 写在类的外部的函数叫做全局函数,不属于任何的类. 如果写在类的里面就叫做类的成员函数 这里注意的是,类的成员函数如果加了const,就表明该函数不 ...

  3. C++类的成员函数(在类外定义成员函数、inline成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  4. C++类的成员函数(在类外定义成员函数)

    类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...

  5. 习题 8.4 在本章第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数的源文件main.cpp。请完善该程序,在类中增加。。。

    C++程序设计(第三版) 谭浩强 习题8.4 个人设计 习题 8.4 在本章第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数 ...

  6. 习题 8.5 将本章的例8.4改写为一个多文件的程序:1.将类定义放在头文件arraymax.h中;2.将成员函数定义放在源文件arraymax.cpp中;3.主函数放在源文件file1.cpp中。

    C++程序设计(第三版) 谭浩强 习题8.5 个人设计 习题 8.5 将本章的例8.4改写为一个多文件的程序: 1.将类定义放在头文件arraymax.h中: 2.将成员函数定义放在源文件arraym ...

  7. 类中成员函数的函数指针定义以及使用

    在algorithm算法中经常会碰到传递函数指针的情况,在这里面他们把这种类型叫做谓词,当然lambda表达式就是 谓词的一种.这次内容要说的当类的成员函数做为谓词时,是什么样子的,如何使用呢? 类中 ...

  8. (25.2)类的定义之类的数据成员,类的成员函数,类的声明

    文章目录 1.类的数据成员 2.类的成员函数 3.成员函数重载及默认参数 4.成员函数的存储方式 5.类的声明 1.类的数据成员 (1)在类中声明数据成员 正如我们所见, 类的数据成员的声明类似于普通 ...

  9. java设计一个顺序表类的成员函数_顺序表代码讲解以及实现

    用C语言编写一个有关顺序表的程序代码 创建一个顺序表,其数据元素类型为整型: 在该顺序表中插入数据(#include #include #define MaxSize 50 typedef char ...

最新文章

  1. Linux下Redis3.2的安装和部署
  2. 5G可能和你想象的完全不同!(文末福利)
  3. [mybatis]Configuration XML_mappers
  4. SQL的各种使用方法
  5. 9008线刷_小米红米手机新机9008模式怎么进入?小米线刷救砖模式
  6. 苹果iPhone XI奋起直追?直接升级四摄镜头
  7. js中当前时间的获得以及日期格式的转换
  8. Spring@Import注解的三种用法
  9. C#照片预览,好处是图片不在项目中也可以查看
  10. 军工产品元器件筛选标准,军用品测试实验室
  11. 使用Python进行局域网传输文件两种方法
  12. 三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)
  13. Android Jetpack 之 App Startup
  14. 亲爱的,别把上帝缩小了 ---- 读书笔记3
  15. 从零开始内网渗透学习
  16. 【约束优先级问题二】动态高度cell
  17. 外贸老手告诉你:外贸实用工具
  18. BAPI_ACC_DOCUMENT_POST 创建凭证报错“被合并的公司 XXXX 和 XXXX 是不同的”
  19. java计算一个月有几周_java 如何获取 一个月 有多少周
  20. 超市服务器操作系统,超市收银系统 服务器 配置

热门文章

  1. 升级到 iOS14 之后微信发不了图片?教你如何解决
  2. 计算机课程测验,14网络《计算机网络》课程测验试卷-20210614142251.pdf-原创力文档...
  3. MacOs的环境变量配置
  4. discuz插件,商业插件,免费插件
  5. 学计算机就会修电脑的笑话,开心一刻笑话:昨晚,我去电脑城修电脑,我在等电脑修好的时候...
  6. 激活office2010出现0x80070190错误解决方法
  7. 微信再出大招,货币基金可直接充值交话费
  8. 前端微信公众号支付功能实现
  9. 保姆级教学——集群环境搭建及创建集群
  10. 今日头条2017客户端工程师实习生笔试题