以前都是在windows下学C++,最近转到Linux下学习。留一下自己在学习过程中解决困难的笔记。
在Linux下,如果定义了多个头文件(.h),且里面的方法或函数都上在另外的文件(.cpp)中实现的。当你在另一个包含有主函数的文件(.cpp)中调用这些方法后,在编译的时候,不能像在windows下,只编译包含有主函数的文件(其实是windows中的IDE自己把其它文件也编译了),而是要编译每个.cpp文件。你可以分开编译每个.cpp文件,也可以整个一直编译。
如:
//x.h
{
void P();
}
//x.cpp
#include"x.h"
{
void P()
{
cout<<"C++"<<endl;
}
}
//main.cpp
#include"x.h"
int main()
{
P();
return 0;
}
编译:
1.分开编译 g++ x.cpp
g++ -o main main.cpp
编译完成之后就会生成一个main的可执行文件
2.一起编译 g++ -o main x.cpp main.cpp
编译完成之后就会生成一个main的可执行文件
再举个例子:
下面在cylindircal.h中定义了一个圆柱体积类,成员变量有半径和高;方法有设置半径和高,返回半径,高和体积。在cylindircal.cpp中分别实现了所有的方法,且在main.cpp对其进行了调用。
/*************************************************************************
> File Name: cylindircal.h
> Author: Tolic
> Mail: mr_king1994@163.com
> Created Time: Fri 08 May 2015 09:18:09 CST
************************************************************************/
//cylindircal.h
#include<iostream>
#ifndef _CYLINDIRCAL_H
#define _CYLINDIRCAL_H
const double PI=3.14;
class cylindircal
{
private:
double radius;
double height;
public:
cylindircal();
~cylindircal();
void setRadius(double r);
void setHeight(double h);
double getRadius();
double getHeight();
double getVolume();
};
#endif
/*************************************************************************
> File Name: cylindircal.cpp
> Author: Tolic
> Mail: mr_king1994@163.com
> Created Time: Fri 08 May 2015 09:29:16 CST
************************************************************************/
//cylindircal.cpp
#include<iostream>
#include"cylindircal.h"
using namespace std;
cylindircal::cylindircal()
{
this->radius=0.0;
this->height=0.0;
}
cylindircal::~cylindircal()
{}
void cylindircal::setRadius(double r)
{
this->radius=r;
}
void cylindircal::setHeight(double h)
{
this->height=h;
}
double cylindircal::getRadius()
{
return this->radius;
}
double cylindircal::getHeight()
{
return this->height;
}
double cylindircal::getVolume()
{
return this->radius*this->radius*PI*this->height;
}
/*************************************************************************
> File Name: main.cpp
> Author: Tolic
> Mail: mr_king1994@163.com
> Created Time: Fri 08 May 2015 09:35:11 CST
************************************************************************/
#include<iostream>
#include"cylindircal.h"
using namespace std;
int main()
{
double temp;
cin>>temp;
cylindircal cy;
cy.setRadius(temp);
cin>>temp;
cy.setHeight(temp);
cout<<"Radius="<<cy.getRadius()<<","<<"Height"<<cy.getHeight()<<endl;
cout<<"Volume="<<cy.getVolume();
return 0;
}