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

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

 

posted @ 2014-06-27 12:45  義丨往昔灬miller  阅读(721)  评论(0编辑  收藏  举报