第十七讲 开始编写代码前的设计—————面向对象高级开发

1 开始编写代码前的设计

  • 1,考虑传入的参数时否可以是&(左值),是否用const(不会修改传入的值);
    • 传入&类型参数:只能是左值
    • 传入const &类型参数:可是左值或者右值(临时对象)
    • &类型参数不能是右值的原因:传&的意图是改变对象值,但是传递右值时,编译器会生成一个临时匿名对象,让&类型参数指向它(这些临时匿名对象只会在函数调用期间存在,随后编译器便将它删除),因此不能做到更改值的意图,C++为了阻止这种情况发生,便在这种情况下禁止创建临时变量;
    • const &类型参数可以是右值的原因:const &本就意味着不会对对象造成更改,因此C++会为其创建临时匿名对象(只在函数调用期间存在)
  • 2,考虑返回的类型是否是&(对象要不是loacl object【局部对象】),函数类型是否用const(函数不改变类成员变量值)
#include <iostream>
#include <cstdlib>

double func(const double& ra)

{
    return ra*ra;
}

double  func2(double& ra){
    return  ra*ra;
}


int main(){
    //左值
    double side = 3.0;
    double* pd = &side;
    double& rd = side;
    //右值
    long edge = 5L;
    double lens[4]={2.3,3.4,4.5,6.7};

    //const&类型
    //左值参数
    double c1 = func(side); // ra 是side
    double c2 = func(lens[2]); // ra是lens[2]
    double c3 = func(rd);  // ra 是 rd
    double c4 = func(*pd); // ra 是*pd
    //右值参数
    double c5 = func(edge); // ra 是临时变量(double引用不能指向long)
    double c6 = func(7.0); // ra 是临时变量
    std::cout<<"c5:"<<c5<<std::endl;//c5:25
    std::cout<<"c6:"<<c6<<std::endl;//c6:49

    //&类型
    //右值参数(报错)
    //double d1 = func2(2.0);
     // double d2 = func2(edge);

    return 0;
}
相关推荐
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页