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步,也会正确

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

  • 相关阅读:
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    qemu-img压缩磁盘操作
    单文件组件
    单文件组件
    单文件组件
    单文件组件
    最适合人工智能开发的5种编程语言优缺点对比
    浅谈WebService开发(一)
  • 原文地址:https://www.cnblogs.com/qbmiller/p/3811761.html
Copyright © 2011-2022 走看看