运算类实现 及 GNU Makefile基本结构
1.运算类的实现,代码如下:
(1)operator.cpp
#include<iostream>
#include "operator.h"
using namespace std;
bool Operator::setOperator(char c)//注意指定是那个类的函数
{
bool ret = true;
if( ('+' == c) | ('-' == c) | ('*' == c) | ('/' == c) )
{
Opm = c;
}
else
{
cout<<"Invalid operator => "<<c<<endl;
ret = false;
}
return ret;
}
void Operator::setParameter(double d1, double d2)
{
m1 = d1;
m2 = d2;
}
bool Operator::result(double& r)//利用引用来存储结果
{
bool ret = true;
switch( Opm )
{
case '/':
if( (-0.000000001 < m2) && (m2 < 0.000000001) )
{
ret = false;
}
else
{
r = m1 / m2;
}
break;
case '+':
r = m1 + m2;
break;
case '*':
r = m1 * m2;
break;
case '-':
r = m1 - m2;
break;
default: ret = false;
break;
}
return ret;
}
(2)operator.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_
class Operator
{
private:
char Opm;//操作符
double m1,m2;//操作数
public:
bool setOperator(char c);//设置操作符
void setParameter(double d1, double d2);//设置操作数
bool result(double& r);//计算并且返回结果 };
#endif
(3)main.c
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include "operator.h"
using namespace std;
int main(int argc, char *argv[])
{
double ret = ; if(argc < )
{
cout<<"usage: ./operator parameter1 operator parameter2"<<endl;
return ;
} char opr=*argv[];
double parameter1=atoi(argv[]);
double parameter2=atoi(argv[]);
Operator op;//注意一定要记得用类来定义对象
op.setOperator(opr);
op.setParameter(parameter1,parameter2);
if(op.result(ret))
{
cout<<parameter1<<opr<<parameter2<<"="<<ret<<endl;//打印结果为6
}
cout<<"Press any key to continue..."<<endl;
getchar();
return ;
}
(4)Makefile
#http://blog.csdn.net/ruglcc/article/details/7814546/ makefile总结
# 指令编译器和选项
CC=g++# 开发过程中所用的选项
CFLAGS = -g -Wall –ansi
# 发行时用的选项
# CFLAGS = -O -Wall –ansi TARGET = operator # 生成的目标文件
OBJS = main.o operator.o
INC = -I ./ #指定头文件目录 $(TARGET) : $(OBJS)
# @echo TARGET:$@
# @echo OBJECTS:$^
$(CC) -o $@ $^ clean:
rm -rf $(TARGET) $(OBJS)
2.Makefile来告诉make命令如何编译和链接这几个文件。规则是:
1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
Makefile的规则
在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。
target... : prerequisites ...
command
...
...
-------------------------------------------------------------------------------
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
操作系统命令,一定要以一个Tab键作为开头。
运算类实现 及 GNU Makefile基本结构的更多相关文章
- GNU Makefile中的条件控制结构
在常见的编程语言中,使用条件控制结构诸如if ... else if ... else...是很寻常的事情,那么在GNU Makefile中如何使用呢? ifeq ifneq 例如:foo.sh #! ...
- Java练习 SDUT-4303_简单的复数运算(类和对象)
简单的复数运算(类和对象) Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 设计一个类Complex,用于封装对复数的下 ...
- 第2课 - 初识makefile的结构
第2课 - 初识makefile的结构 1. makefile 的意义 (1)makefile 用于定义源文件之间的依赖关系 (在阅读开源软件源码时,可通过Makefile掌握源码中各个文件之间的关系 ...
- go变量、类的概念以及类的使用方式,嵌套结构体
go变量.类的概念以及类的使用方式,嵌套结构体 Go变量 go使用var声明变量,当声明变量时,这个变量对应的值总是会被初始化.这个值要么用指定的值初始化,要么用零值(即变 量类型的默认值)做初始化. ...
- 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...
- Python:运算类内建函数列举
1. divmod() python3.x版本中,整除运算用 “//”,取余可以用 “%”,在某些问题中要同时得到商和余数就需要两步运算,而使用divmod函数可以同时得到商和余数: 函数有两个参数d ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...
- UML类图(一)-------概述+结构
类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据. 1. 类 类(Class)封 ...
- GNU makefile 学习 - ongoing
资料: <跟我一起写makefile>---中文,baiduNetdisk http://www.gnu.org/software/make/manual/make.html
随机推荐
- CURL操作
具体代码如下: <?php$curl=curl_init(); //初始化$url='http://www.ecshop.com';//curl_setopt(curl资源,选项标志,选项值)c ...
- idea javamaven项目 连接sqlserver 数据库方法
这里用的是c3p0连接数据库 1.pom文件写法: <!-- 数据库连接池 --> <dependency> <groupId>com.mchange</gr ...
- 机器学习与数据科学 基于R的统计学习方法(基础部分)
1.1 机器学习的分类 监督学习:线性回归或逻辑回归, 非监督学习:是K-均值聚类, 即在数据点集中找出“聚类”. 另一种常用技术叫做主成分分析(PCA) , 用于降维, 算法的评估方法也不尽相同. ...
- Linux下安装 jdk
转自 http://www.cnblogs.com/shihaiming/p/5809553.html 0.下载jdk8 登录网址:http://www.oracle.com/technetwork/ ...
- PGAdmin 4使用笔记
1. import 默认username为postgres psql -U username -h localhost -d databasename -f "file address&qu ...
- hdu 1542 Atlantis (线段树扫描线)
大意: 求矩形面积并. 枚举$x$坐标, 线段树维护$[y_1,y_2]$内的边是否被覆盖, 线段树维护边时需要将每条边挂在左端点上. #include <iostream> #inclu ...
- js中BOM与DOM的概念与区别
1.BOM 浏览器对象模型 提供了独立于内容而与浏览器窗口进行交互的对象.描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的 ...
- SpringMVC,Controller的返回页面类型以及路径设置默认值
一般设置在spring-servlet.xml里面设置 <!-- 对转向页面的路径解析.prefix:前缀, suffix:后缀 --> <bean class="org. ...
- 53. Maximum Subarray最大子序和
网址:https://leetcode.com/problems/maximum-subarray/submissions/ 很简单的动态规划 我们可以把 dp[i] 表示为index为 i 的位置上 ...
- MapReduce(二)
MapReduce(二) mapreduce 将Text转化为对象进行处理数据. 根据一来说,将date,classname,name,subject,score变为对象属性 我的数据是:是有重复的. ...