首页 > 代码库 > C++类组合问题

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

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