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基本结构的更多相关文章

  1. GNU Makefile中的条件控制结构

    在常见的编程语言中,使用条件控制结构诸如if ... else if ... else...是很寻常的事情,那么在GNU Makefile中如何使用呢? ifeq ifneq 例如:foo.sh #! ...

  2. Java练习 SDUT-4303_简单的复数运算(类和对象)

    简单的复数运算(类和对象) Time Limit: 2000 ms Memory Limit: 65536 KiB Problem Description 设计一个类Complex,用于封装对复数的下 ...

  3. 第2课 - 初识makefile的结构

    第2课 - 初识makefile的结构 1. makefile 的意义 (1)makefile 用于定义源文件之间的依赖关系 (在阅读开源软件源码时,可通过Makefile掌握源码中各个文件之间的关系 ...

  4. go变量、类的概念以及类的使用方式,嵌套结构体

    go变量.类的概念以及类的使用方式,嵌套结构体 Go变量 go使用var声明变量,当声明变量时,这个变量对应的值总是会被初始化.这个值要么用指定的值初始化,要么用零值(即变 量类型的默认值)做初始化. ...

  5. 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

    预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...

  6. Python:运算类内建函数列举

    1. divmod() python3.x版本中,整除运算用 “//”,取余可以用 “%”,在某些问题中要同时得到商和余数就需要两步运算,而使用divmod函数可以同时得到商和余数: 函数有两个参数d ...

  7. 6、GNU makefile工程管理学习的一个例子

    在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...

  8. UML类图(一)-------概述+结构

    类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.       1. 类       类(Class)封 ...

  9. GNU makefile 学习 - ongoing

    资料: <跟我一起写makefile>---中文,baiduNetdisk http://www.gnu.org/software/make/manual/make.html

随机推荐

  1. php set_time_limit()的作用是什么

    php set_time_limit()用法测试 一.总结 一句话总结:在php中set_time_limit函数是用来限制页面执行时间的,如我想把一个php页面的执行时间定义为5秒就可以set_ti ...

  2. SpringBoot集成TkMybatis插件

    前提: 基于SpringBoot项目,正常集成Mybatis后,为了简化sql语句的编写,甚至达到无mapper.xml文件. 在本篇总结教程,不在进行SpringBoot集成Mybatis的概述. ...

  3. Apollo快速安装视频教程

    参见视频 https://www.csdn.net/article/a/2018-05-14/15948340

  4. 雷林鹏分享:C# 封装

    C# 封装 封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问. 抽象和封装是面向对象程序设计的相关特性. ...

  5. LeetCode--014--最长公共前缀(java)

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  6. 使用Vuex来处理Authentication token

    https://www.cnblogs.com/chentianwei/p/10156459.html 之前博客:建立了一个app.使用loacal storage 来管理tokens(通过clien ...

  7. 【洛谷p1507】NASA的食物计划

    (一次a……) NASA的食物计划[传送门] 好的上算法标签: 嗯这是个二维背包 (万年不变分隔线) 二维的题就是在一维基础上增加了一个条件,这个背包不仅含有质量还有体积.所以我们增加一层循环.核心算 ...

  8. 数组的typedef 和函数的typedef

    #include<stdio.h> #include<string.h> #include<stdlib.h> // 数组指针 语法 梳理 // //int a[1 ...

  9. input上传限定文件类型

    input上传限定文件类型 accept="image/*"   限定为只能上传图片 accept=”audio/*   限定为只能上传音频 accept=”video/*” 限定 ...

  10. Leetcode 144

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...