码迷,mamicode.com
首页 > 编程语言 > 详细

C++类组合问题

时间:2014-07-10 13:49:43      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   问题   

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

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

 

C++类组合问题,布布扣,bubuko.com

C++类组合问题

标签:style   blog   color   使用   os   问题   

原文地址:http://www.cnblogs.com/qbmiller/p/3811761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!