运算类实现 及 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
随机推荐
- Ubuntu更改源和搜狗输入法安装卸载
安装完Ubuntu 16.04后,要更换为国内的软件源: sudo gedit /etc/apt/sources.list #用文本编辑器打开源列表 在文件开头添加下面的阿里云的软件源: deb ...
- nginx ----> nginx配置/反向代理/负载均衡
nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写. 环境: Ubuntu16.04 安装ngin ...
- python安装pandas和lxml
一.安装python 二.安装pip 三.安装mysql-connector(window版):下载mysql-connector-python-2.1.3,解压后进入目录,命令安装:pip inst ...
- 2.2 UML用例模型
参与者(Actor) 参与者(注:有另一种翻译“执行者”) 代表位于系统之外并和系统进行交互的一类事物(人.物.其他软件子系统等) 通过它,可以对软件系统与外界发生的交互进行分析和描述 通过它,可以了 ...
- springBoot配置,贴个图
spring: datasource: name: test url: jdbc:mysql://localhost:3306/epay?characterEncoding=UTF-8 usernam ...
- 一、ZooKeeper学习
一.什么是ZooKeeper? ZooKeeper是一个分布式应用的开源协调服务.目的就是给用户提供同步.配置管理.分组和命名等服务.是Java语言编写的,支持Java和C两种语言.通俗的讲,它就是用 ...
- ActiveMQ producer同步/异步发送消息
http://activemq.apache.org/async-sends.html producer发送消息有同步和异步两种模式,可以通过代码配置: ((ActiveMQConnection)co ...
- os模块-subprocess 模块- configpaser 模块
一. os 模块 主要用于处理与操作系统相关操作,最常用文件操作 使用场景:当需要操作文件及文件夹(增,删,查,改) os.getcwd() 获取当前工作目录 os.chdir('dirname') ...
- 转: Linux mount/unmount命令
https://blog.csdn.net/okhymok/article/details/76616892 楼主具体哪里转的 我不清楚 好像没看到原始出处 开机自动挂载 如果我们想实现开机自动挂载某 ...
- javascript 多个onclick function 取对应值
方法1: 直接获取值 <button onclick="aa(1)">执行</button> <button onclick="aa(2)& ...