运算类实现 及 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 = 0;

    if(argc < 3)
    {
    cout<<"usage: ./operator parameter1 operator parameter2"<<endl;
    return 0;
    }

    char opr=*argv[2];
    double parameter1=atoi(argv[1]);
    double parameter2=atoi(argv[3]);
    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 0;
}

(4)Makefile

#http://blog.csdn.net/ruglcc/article/details/7814546/  makefile总结
# 指令编译器和选项
CC=g++
CFLAGS=-Wall

TARGET = operator # 生成的目标文件
OBJS = main.o operator.o
INC = -I ./  #指定头文件目录

$(TARGET) : $(OBJS)
#   @echo TARGET:[email protected]
#   @echo OBJECTS:$^
    $(CC) -o [email protected] $^  

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键作为开头。

时间: 2024-08-07 08:37:16

运算类实现 及 GNU Makefile基本结构的相关文章

排序算法总结----运算类排序

运算排序 第一:计数排序 1:原理 对于每个输入数,确定小于该数的个数.这样可以直接把数放在输出数组的位置. 2:性能 最差时间复杂度 最优时间复杂度 平均时间复杂度 最差空间复杂度 注:稳定算法 3:应用 适合0~100的范围的数,当然可以和基排序结合而扩展数的范围. 4:实现 void CountingSort(int *A, int *B, int array_size, int k) { int i, value, pos; int * C=new int[k+1]; for(i=0;

Python内置函数_数学运算类

本文和大家分享的主要是python内置函数数据运算类相关内容,一起来看看吧,希望对大家学习python 有所帮助. abs abs(x) 求绝对值 · X可以是整型,也可以是复数 · 若X是复数,则返回复数的模 >>> abs(-1)1>>> abs(-3+4j)5.0>>> bin bin(x) 将整数x转换为二进制字符串 >>> bin(2)'0b10'>>> bin(3)'0b11' bool bool([x]

GNU Makefile编写

[Introduction] make 是程序员很好用的工具,如果存在makefile存在,每次更新代码,执行shell命令 shell 就可以执行所有需要编译的文件,make是根据你编写的Makefile文件和源程序的最后的修改时间来决定哪些文件需要更新重编的. [Introduction to Makefiles] 问题的关键是如何编写一个Makefile文件,我们都是通过Makefile 来告诉make工具怎么去做.一个简单的makefile的规则如下: target ... : prer

使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。

package org.hibernate.dao; import java.io.Serializable; import org.hibernate.*; import org.hibernate.entity.*; //使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题. public class UserDAOImpl implements UserDAO { private abstract class UserDAOTemplate{ abstract protec

Java 常用类库 之 Math 数学运算类

http://www.verejava.com/?id=16993076554196 /** 知识点: Math 数学运算类 */ public class TestMath { public static void main(String[] args) { //取绝对值 System.out.println(Math.abs(-2)); //取大于小数的最小整数 System.out.println(Math.ceil(1.6)); System.out.println(Math.ceil(

GNU Makefile tips

1.make 参数 下面列举了所有GNU make 3.80版的参数定义.其它Linux版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文档. “-b” “-m” 这两个参数的作用是忽略和其它版本make的兼容性. “-B” “–always-make” 认为所有的目标都需要更新(重编译). ”C“ “–directory=” 指定读取makefile的目录.如果有多个“-C”参数,make的解释是后面的路径以前面的作为相对路径,并以最后的目录作为被指定目录.如

OC中的NSDate日期类和Foundation框架中的结构体相关操作

一:NSDate NSDate可以?用来表?示时间,可以进?行?一些常见的?日期\时间处理 • ?一个NSDate对象就代表?一个时间• [NSDate date]返回的就是当前时间 1)日期对象的格式化操作 // 1,获取当前时间 // NSDate *date = [NSDate date]; // NSLog(@"date = %@", date); // // // 格式化输出时间 //// y : 年 //// // M : 月 //// // d : 日 //// // h

黑马程序员————C语言基础语法二(算数运算、赋值运算符、自增自减、sizeof、关系运算、逻辑运算、三目运算符、选择结构、循环结构)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲  算数运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1.加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2.减法运算- 除开能做减法运算,还能表示符号:-10.-29 3.乘法运算* 注意符号,不是x,而是* 4.除法运算/ 注意符号,不是÷,也不是\,而是/ 整数除于整数,还是整数.1/2的值是0,这个并不是二分之一 5.取余运算% 什么是取余:两个整数相除之后

初识 makefile 的结构(二)

我们在上节中说到 makefile 的本质就是一个脚本程序,用来解释执行的.那么它的意义是用于定义源文件间的依赖关系,说明如何编译各个源文件并生成可执行文件.我们来看看依赖的定义,如下 下来我们来分析下 makefile 中元素的意义:a> targets:通常是需要生成的目标文件名,make 所需执行的命令名称:b> perequisities:当前目标所依赖的其他目标或文件:c> command:完成目标所需要执行的命令.我们来说说规则中的注意事项:a> targets 可以包