zoukankan      html  css  js  c++  java
  • C++类组合问题

    #include <iostream>
    using namespace std;
    
    class Vehicle
    {
    public:
        Vehicle(float speed=0,int total=0)
        {
            Vehicle::speed = speed;
            Vehicle::total = total;
        }
    protected:
        float speed;//速度
        int total;//最大载人量
    };
    
    class Motor
    {
    public:
        Motor(char *motor)
        {
            Motor::motortype = motor;
        }
    
        char* SMT(Motor &temp);
    protected:
        char *motortype;//发动机型号
    };
    char* Motor::SMT(Motor &temp)
    {
        return temp.motortype;
    }
    
    class Car:public Vehicle//继承的体现
    {
    public:
        Car(float speed,int total,int aird,char *motortype):Vehicle(speed,total),motor(motortype)
        {
            Car::aird = aird;
        }
    
        Motor rm(Car &temp);
    protected:
        int aird;//排量
        Motor motor;//类组合的体现
    };
    
    Motor Car::rm(Car &temp)
    {
        return temp.motor;
    }
    
    //--------------------------------------------------------------
    void test1(Vehicle &temp)
    {
        //中间过程省略
        cout<<"qinbin"<<endl;
    };
    void test2(Motor &temp)
    {
        cout<<temp.SMT(temp);//读者这里注意一下,temp既是对象也是对象方法的形参
    }
    //--------------------------------------------------------------
    
    int main()
    {
        Car a(150,4,250,"奥地利AVL V8");
        test1(a);
       // test2(a);//错误,Car类与Motor类无任何继承关系
        //test2(a.rm(a));//如果Car类成员是public的那么可以使用test2(a.motor)
       Motor test =a.rm(a);  这2步正确,而上面一步不对,是因为引用 临时存储,所以储存下来就对了 编译器问题
        test2(test);
        cin.get();
    }
    Motor& rm(Car &temp);
    
    Motor& Car::rm(Car &temp)
    {
        return temp.motor;
    }
    
    改这2步,也会正确

    据说是编译器问题,而不是说的 局部变量被销毁的问题。而是编译器不支持在函数内增加自创对象,并且自动转换为对象引用的问题。很常用!

  • 相关阅读:
    前台Json格式中时间的格式转换
    存储过程
    自定义注解
    递归(累加)
    java操作符
    Markdown语法参考
    for表达式的循环执行顺序
    java形参与作用域
    java引用类型数组的创建方式
    学习总结之Log4NET
  • 原文地址:https://www.cnblogs.com/qbmiller/p/3811761.html
Copyright © 2011-2022 走看看