C++ 类 :类成员函数定义
在编写 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++ 类 :类成员函数定义相关推荐
- 10.2.1 关于vc++不支持把类的成员函数定义为类的友元函数的处理
•说明:有的C++编译系统(如Visual C++ 6.0)没有完全实现C++标准,它所提供不带后缀.h的头文件不支持把成员函数重载为友元函数.但是VisualC++所提供的老形式的带后缀.h的头文件 ...
- C++学习笔记:类的成员函数的声明与定义
今天学习一下类的成员函数,首先讲一下常规的类外的函数 写在类的外部的函数叫做全局函数,不属于任何的类. 如果写在类的里面就叫做类的成员函数 这里注意的是,类的成员函数如果加了const,就表明该函数不 ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- C++类的成员函数(在类外定义成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- 习题 8.4 在本章第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数的源文件main.cpp。请完善该程序,在类中增加。。。
C++程序设计(第三版) 谭浩强 习题8.4 个人设计 习题 8.4 在本章第8.3.3节中分别给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数 ...
- 习题 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 ...
- 类中成员函数的函数指针定义以及使用
在algorithm算法中经常会碰到传递函数指针的情况,在这里面他们把这种类型叫做谓词,当然lambda表达式就是 谓词的一种.这次内容要说的当类的成员函数做为谓词时,是什么样子的,如何使用呢? 类中 ...
- (25.2)类的定义之类的数据成员,类的成员函数,类的声明
文章目录 1.类的数据成员 2.类的成员函数 3.成员函数重载及默认参数 4.成员函数的存储方式 5.类的声明 1.类的数据成员 (1)在类中声明数据成员 正如我们所见, 类的数据成员的声明类似于普通 ...
- java设计一个顺序表类的成员函数_顺序表代码讲解以及实现
用C语言编写一个有关顺序表的程序代码 创建一个顺序表,其数据元素类型为整型: 在该顺序表中插入数据(#include #include #define MaxSize 50 typedef char ...
最新文章
- Linux下Redis3.2的安装和部署
- 5G可能和你想象的完全不同!(文末福利)
- [mybatis]Configuration XML_mappers
- SQL的各种使用方法
- 9008线刷_小米红米手机新机9008模式怎么进入?小米线刷救砖模式
- 苹果iPhone XI奋起直追?直接升级四摄镜头
- js中当前时间的获得以及日期格式的转换
- Spring@Import注解的三种用法
- C#照片预览,好处是图片不在项目中也可以查看
- 军工产品元器件筛选标准,军用品测试实验室
- 使用Python进行局域网传输文件两种方法
- 三菱FX3U-PLC 前馈+PID闭环调节实现液压同步控制(比例换向阀)
- Android Jetpack 之 App Startup
- 亲爱的,别把上帝缩小了 ---- 读书笔记3
- 从零开始内网渗透学习
- 【约束优先级问题二】动态高度cell
- 外贸老手告诉你:外贸实用工具
- BAPI_ACC_DOCUMENT_POST 创建凭证报错“被合并的公司 XXXX 和 XXXX 是不同的”
- java计算一个月有几周_java 如何获取 一个月 有多少周
- 超市服务器操作系统,超市收银系统 服务器 配置
热门文章
- 升级到 iOS14 之后微信发不了图片?教你如何解决
- 计算机课程测验,14网络《计算机网络》课程测验试卷-20210614142251.pdf-原创力文档...
- MacOs的环境变量配置
- discuz插件,商业插件,免费插件
- 学计算机就会修电脑的笑话,开心一刻笑话:昨晚,我去电脑城修电脑,我在等电脑修好的时候...
- 激活office2010出现0x80070190错误解决方法
- 微信再出大招,货币基金可直接充值交话费
- 前端微信公众号支付功能实现
- 保姆级教学——集群环境搭建及创建集群
- 今日头条2017客户端工程师实习生笔试题