引言:本篇主要在linux下的C++实现进度条的功能。按照多文件编程,同时使用Makefile文件完成多文件的编译、连接。
首先创建头文件:
1. progress.h
#pragma once
#include <iostream>
#include <cstring>
#include <iomanip>
#include <unistd.h>
using namespace std;
class Prog{
public:
Prog(int time,const string sample);
void get_progress();
private:
int _time;
string _sample;
};
首先定义一个Prog的类,成员变量为进度条需要多少秒和进度条样式。并声明构造函数和创建进度条的函数。
2. progress.cpp
#include "progress.h"
Prog::Prog(int time,const string sample)
:_time(5)
,_sample("#")
{
_time = time;
_sample = sample;
}
void Prog::get_progress(){
int cont = 100; //进度为100%
char arry[101]; //要放一个'\0'
string s = "|/"; //进度条最后价格旋转动效
memset(arry,'\0',101); //把arry中的全部置为'\0'
for(int i = 0; i<cont;i++){
arry[i] = _sample[0];
cout<<'['<<arry<<setw(100-i)<<']'<<" ["<<i+1<<"%"<<"]"<<" ["<<s[i%2]<<']'<<'\r'; //只回车不换行
cout<<flush; //强制刷新缓冲区
usleep(10000*_time);
}
cout<<endl;
}
实现构造函数,初始化列表,如果创建对象时,不传值,默认为5秒完成,样式为#。
3. main.cpp
#include "progress.h"
int main()
{
Prog p1(3,"#");
p1.get_progress();
return 0;
}
这样这个进度条功能已经实现,但是每次如果要编译就要:
g++ main.cpp progress.cpp
这时候就要使用Makefile了,这是一个文件, 我们需要在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。
4. Makefile
prog : main.cpp progress.cpp
g++ main.cpp progress.cpp -o prog
格式为:
target : dependency
(Tab)rule
目标文件 :依赖项
(Tab键)规则