2015-10-05 119 views
1

我明白如何創建一個對象,我知道如何創建一個指向該對象的指針。 但我正在努力創建一個指向另一個對象/類中的對象的指針。如何將指針傳遞給構造函數?

我創建了一個Car和Engine類。 我想讓Car類有一個指向將傳入Car類的構造函數的引擎對象的指針。我沒有運氣試圖找出正確的語法來做到這一點。

Engine.h

​​

Engine.cpp

#include "stdafx.h" 
#include "Engine.h" 


Engine::Engine(int power) 
{ 
    _power = power; 
} 


Engine::~Engine() 
{ 
} 

int Engine::getPower() 
{ 
    return _power; 
} 

void Engine::setPower(int power) 
{ 
    _power = power; 
} 

Car.h

#pragma once 
#include "Engine.h" 

class Car 
{ 
private: 
    Engine* _engine; 
public: 
    Car(); 
    ~Car(); 
}; 

Car.cpp

#include "stdafx.h" 
#include "Car.h" 


Car::Car(Engine &engine) 
{ 
    _engine = engine; 
} 

Car::~Car() 
{ 
} 

可能有人請告訴我我怎麼會去嗎?

+0

嘗試閱讀關於智能指針以及 –

回答

2

Car.cpp

Car::Car(Engine &engine){...} 

只要切換到

Car::Car(Engine* engine): _engine(engine){} 

,也不要忘了在Car.h的構造方法的簽名更改爲

Car(Engine*); 

否則你混合帶有引用的指針,它們在語義上不相同。還要考慮在構造函數中使用構造函數初始值設定項列表,而不是賦值。對於POD來說,它沒有區別,但對於昂貴的構造對象來說它有所不同,因爲首先對象是默認構造的,然後通過拷貝構造函數將其分配給它。

+0

謝謝! 你有沒有解釋構造函數的語法用法的資源? 我必須在稍大的範圍內實現這一點,更好的理解可能有助於避免更多的問題。 – Afterfield

+0

參見例如然後看看[這裏](http://stackoverflow.com/questions/388242/the-definitive-c-book-引導和列表)。 – vsoftco