首页 > 编程语言 >C++primer练习14.44-53

C++primer练习14.44-53

时间:2022-08-18 10:58:43浏览次数:52  
标签:类型转换 return int double 练习 53 operator primer 14.44

练习14.44

编写一个简单的桌面计算器使其处理二元计算

double add(double a,double b)
{
    return a+b; 
 } 

auto subtra=[](double a,double b){return a-b;
};
struct multi{
    double operator()(double a,double b)
    {
        return a*b;
    }
};
auto divide=[](double a,double b){return a/b;
};
//auto mod=[](double a,double b){return a%b;
//};

int main()
{
    map<string,function<double(double,double)>> ope;
    ope["+"]=add;ope["-"]=subtra;ope["*"]=multi();ope["/"]=divide;
    string chart="-";
    double a=9,b=5;
    cout<<"first number"<<endl;
    while(cin>>a)
    {
        cout<<"operator"<<endl;
        cin>>chart;
        cout<<"second number"<<endl;
        cin>>b;
        cout<<ope[chart](a,b)<<endl;
        cout<<"first number"<<endl;
    }
}

练习14.45

编写类型转换运算符将一个Sales_data对象分别转换成string和double,你认为这些运算符的返回值应该是什么

    operator double()const{return revenue;}
    operator std::string()const{return isbn;} 

返回值可能是利润和isbn吧

练习14.46

你认为应该为Sales_data类定义上面的类型转换符?应该把它们声明成explicit吗?为什么

::没什么必要,完全可以让成员函数代替,但是如果设置了可能声明成explicit会好点,但是没有益处,还是繁琐

练习14.47

说明下面这两个类型转换运算符的区别

struct Integral {

operator const int();转换成const int

operator int() const;将this设置成const

}

练习14.50

在初始化ex1和ex2的过程中,可能用到哪些类类型的转换序列呢?说明初始化是否正确并解释原因

struct Longdouble

{LongDouble(double=0.0);

operator double();

operator float ();

};

LongDouble ldobj;

int ex1=ldobj;两种类型转换都可能,存在二义性

float ex2=ldobj;第二种类型转换

练习14.51

在调用calc的过程中,可能用到哪些类型转换序列呢?说明最佳可行函数是如何被选出来的

void calc(int){
};
void calc(LongDouble);
double dval;
int main(){
    calc(dval);

return 0;
}

::优先标准库定义的类型转换

练习14.52

在下面的加法表达式中分别选择了哪个operator+?列出候选函数、可行函数及为每个可行函数的实参执行的类型转换:

struct LongDouble{
LongDouble(double=0.0){std::cout<<"1"<<std::endl;}

operator double()const;

operator float()const;
LongDouble operator+(const SmallInt&);
};
LongDouble operator+(LongDouble&,double);
int main(){
    SmallInt si;
    LongDouble ld;
    //ld=si+ld;
    ld=ld+si;
}

第一个表达式存在二义性,SmallInt不可以转换成double,而LongDouble可以转换成float和double,标准库的加运算有二义性(int,double)(int,float)

第二个表达式可以通过成员运算符直接运算

练习14.53

假设我们已经定义了SmallInt,判断下面的加法表达式是否合法。如果合法,使用了哪个加法运算符?

SmallInt sl;

double d=sl+3.14;

既可以转换成成员运算,也可以转换成标准库运算,存在二义性,改成double d=sl+SmallInt(3.14);

 

标签:类型转换,return,int,double,练习,53,operator,primer,14.44
From: https://www.cnblogs.com/yddl/p/16597910.html

相关文章

  • C++primer练习14.26
    练习14.26为你的String类定义下标运算符char&operator[](size_td){returnelements[d];}constchar&operator[](size_td)const......
  • C++primer练习14.10-23
    练习14.10对于Sales_data的输入运算符来说给定下面的输入会发生什么?(a)0-201-99999-91024.95正常输入(b)1024.950-210-99999-9最后一个输入格式错误,会chongz练习14.11......
  • C++primer练习14.1-9
    练习14.1在什么时候情况下重载的运算符与内置运算符有所区别?在什么时候重载的运算符又与内置运算符一样::为类设计的运算符,尽量重载的运算符含义不要改变,如+还是加法练习1......
  • <摘自https://blog.csdn.net/JavaAndLI/article/details/125359786>SQL分页查询的写法
    MySQL的分页实现是使用LIMIT关键字。Oracle的分页是实现主要是基于rownum行号。SQLServer的分页主要使用的关键字是TOP。 具体用法总结如下:本文中的变量名词说明:1,......
  • C++primer练习13.55-58
    练习13.55为你的StrBlob添加一个右值引用版本的Push_backvoidStrBlob::push_back(string&&s){data->push_back(std::move(s));}练习13.56如果sorted定义如下,会发生......
  • C-Primer-Plus-第二章-C语言概述
    第二章C语言概述参考书籍:CPrimerPlus(第6版)中文版一、前言打算跟这本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。本文所有图片均来源于此书。二、主......
  • PCR引物设计软件primer5
    PrimerPremier5是一款分子生物学试验常用的PCR引物设计软件,下面简要介绍一下该软件的使用方法。 第一步:打开primer5软件(图1). 图1 第二步:依次点击File-->New......
  • C++primer练习13.49-54
    练习13.49为你的String类添加一个移动构造函数和一个移动赋值运算符String(String&&a):elements(std::move(a.elements)),first_free(std::move(a.first_free)),cap(st......
  • C-Primer-Plus-第一章-初识C语言
    第一章初识C语言参考书籍:CPrimerPlus(第6版)中文版一、前言打算跟着本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。二、主要内容1.C语言起源1972年......
  • 1053 住房空置率——20分
    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房......