首页 > 代码库 > 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步,也会正确
据说是编译器问题,而不是说的 局部变量被销毁的问题。而是编译器不支持在函数内增加自创对象,并且自动转换为对象引用的问题。很常用!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。