2016-05-28 4 views
1

私はまだポインタをつかむ過程にあり、そうすることで、ポインタエラーの発見を練習するために素早く意味のないプログラムが書かれています。私は、このサンプルコードがクラッシュする理由として困惑している:ポインタを習得しようとするとクラッシュする練習プログラム

#include <iostream> 

class VehiclePart 
{ 
public: 
    VehiclePart(int); 

    int GetVehiclePartNumber(); 
private: 
    int partNumber; 
}; 

VehiclePart::VehiclePart(int VehiclePartNumber) 
{ 
    partNumber = VehiclePartNumber; 
} 

int VehiclePart::GetVehiclePartNumber() 
{ 
    return partNumber; 
} 

class Vehicle 
{ 
public: 
    Vehicle(VehiclePart* VehiclePart, int VehiclePartNumber); 

    int GetVehiclePartNumber(); 

private: 
    VehiclePart* vehiclePart; 

}; 

Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber) 
{ 
    vehiclePart = new VehiclePart(VehiclePartNumber); 
} 

int Vehicle::GetVehiclePartNumber() 
{ 
    return vehiclePart->GetVehiclePartNumber(); 
} 

int main() 
{ 
    VehiclePart* hood = nullptr; 
    Vehicle car(hood, 6); 

    std::cout << "Hello" << std::endl; 

    std::cout << car.GetVehiclePartNumber(); 

    return 0; 
} 

私は私は私がポインタと、なぜクラッシュが発生したに慣れるために、これはちょうど練習されたように、物事について移動するより良い方法があることを知っています。どんな助けもありがとうございます。

+0

コンストラクタからnewを呼び出す予定がある場合、コンストラクタは 'VehiclePart *'をとりますか? – user2296177

+1

変数名(先頭文字)を大文字にしない、メンバー変数にアンダースコアを使用するなど、適切な命名規則に従ってコードを読みやすくする必要があります(vehiclePart_ –

答えて

2
Vehicle::Vehicle(VehiclePart* vehiclePart, int VehiclePartNumber) 
{ 

コンストラクタのパラメータはvehiclePartです。したがって、

vehiclePart = new VehiclePart(VehiclePartNumber); 

これは代わりに、同じ名前のクラスのメンバの、new編クラスのインスタンスにコンストラクタのパラメータを設定終わります。

これはポインタとは関係ありませんが、有効範囲はありません。

+0

など)。ありがとう – Jason

関連する問題