运算类实现 及 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
随机推荐
- 使用pymysql操作数据库
学习如何使用python的pymysql模块来操作mysql数据库 这里的基本用法主要借鉴了该篇博客:https://www.cnblogs.com/woider/p/5926744.html 因为这 ...
- LeetCode--013--罗马数字转整数(java)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...
- Destructuring Assignment in JS(解构assignment in js)
Destructuring Assignment In JavaScript 更省事,代码显得也清楚. Arrays 传统的声明赋值: let johnDoe = ["John", ...
- hdu-2419 Boring Game
http://acm.hdu.edu.cn/showproblem.php?pid=2419 给一个图,预分配点值.随后有三种操作,F u v查询与u联通部分大于等于v的最小的数,没有则返回0,U u ...
- 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证
一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...
- xmanager运行报错:bash: /usr/bin/xterm: No such file or directory
1.原因 xterm没有安装,解决办法是下载然后安装即可. 如果机器可以用yum,则直接使用yum安装xterm即可: yum install -y xterm 如果没有网络,则在某台操作系统大版本相 ...
- Greys Java在线问题诊断工具
摘要: 线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是那次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解Gre ...
- 开发Web应用(1)(二十)
静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /s ...
- e2e 测试 出现的错误
每次开始学习vue的新知识时,总在环境这一块出现很多坑.这次我来记录一下,我在搭建vue e2e测试框架是踏过的坑吧. 我们都只知道,使用vue init webpack 项目名字<项目名字不能 ...
- MVC的前端和后端的Model Binding
1.前端提交JSON 字符串 {"id":13,"title":"这里是标题33","day":"2018-8 ...