sheldon_blogs

运算类实现 及 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键作为开头。

 

 

posted on   sheldon_blogs  阅读(246)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示