zoukankan      html  css  js  c++  java
  • 运算类实现 及 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 = -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键作为开头。

     

     

  • 相关阅读:
    MATLAB远程桌面打开失败解决办法
    Windows 10 激活步骤
    Windows 10 重装技巧
    Office2019部署代码
    vi命令行命令的积累
    github项目cim(命令行即时通讯), HashedWheelTimer学习笔记
    java读取资源文件/打jar包后读取资源文件的区别
    vmware虚拟机网络配置(物理机能用ssh连接虚拟机, 虚拟机能共享物理机网卡上外网)仅主机模式,nat模式应该也可以
    spring cloud 组件学习 hystrix学习
    netty优化学习积累+++++++
  • 原文地址:https://www.cnblogs.com/blogs-of-lxl/p/6440612.html
Copyright © 2011-2022 走看看