2017-01-25 6 views
-4

私は継承の割り当てに取り組んでいます。最初に、そのセッターで私の基底クラスをテストしたかった& getters &コンストラクタですが、私はすでに壁に当たっています。 私のコンストラクタに何が問題なのですか?私は通常、引数のないコンストラクタを使用し、setterとgetterを使ってオブジェクトを構築しますが、両方の型のコンストラクタを使用するよう具体的に指示されています。誰かが私を助けることができますか?C++ Typeはコールオペレータエラーを提供していませんか?

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <string> 
using namespace std; 

class Ship 
{ 
public: 
    Ship(); 
    Ship(string theName, int theYear); 
    string getName(); 
    void setName(string); 
    int getYear(); 
    void setYear(int); 
    void printInfo(); 

    private: 
    string name; 
    int yearBuilt;  
}; 

Ship:: Ship() 
{ 
    name = ""; 
    yearBuilt = 0; 
} 

Ship:: Ship(string theName, int theYear) 
{ 
    name = theName; 
    yearBuilt = theYear; 
} 

string Ship::getName() 
{ 
    return name; 
} 

void Ship::setName(string newName) 
{ 
    name = newName; 
} 

int Ship:: getYear() 
{ 
    return yearBuilt; 
} 

void Ship:: setYear(int newYear) 
{ 
    yearBuilt = newYear; 
} 

void Ship:: printInfo() 
{ 
    cout << "Name: " << name << endl; 
    cout << "Year built: " << yearBuilt << endl; 
} 

int main() 
{ 
    Ship lilCutie; 
    lilCutie("Boat", 1993); 
    lilCutie.printInfo(); 

    return 0; 
} 
+1

私はあなたが 'ship lilCutie(" Boat "、1993);'と思っています。 – songyuanyao

+0

ええ、それはエラーを投げている行です。 – jestrada

+0

ああ、あなたは何を言っているのか分かります。私は、あまりにも長い間、引数のコンストラクタを使用していないと思う。ありがとうございました!!!!!! – jestrada

答えて

1

あなたはそれに値を設定するためにセッターを使用し、その後、パラメータなしでコンストラクタを呼び出すことができます。

Ship lilCutie; 
lilCutie.setName("Boat"); 
lilCutie.setYear(1993); 

また、あなたは、パラメータを指定してコンストラクタを呼び出すことによってそれを行うことができます。

あり
Ship lilCutie("Boat", 1993); 
1

線のコア違いです。

Ship LilCutie; 

LilCutie("Boat", 1993); 

まず定義です。定義は変数を記述し初期化する。 2番目は実行するステートメントで、コール演算子(operator())で構成されます。

ship型にoperator()を定義しなかったので、2行目は不正です。コンストラクターは、オブジェクトの作成と初期化の一環として呼び出されます。だから、あなたはどちらか書く必要があります。もちろん

Ship LilCutie("Boat", 1993); 

または

Ship LilCutie; 

LilCutie = Ship("Boat", 1993); 

を、後者の場合には最初の行は、デフォルトコンストラクタを実行し、2行目は船の新しいオブジェクトを作成し、デフォルトの演算子を使用してその値の割り当てを行い、 (独自の演算子を定義した文字列クラスフィールドの場合は正常に動作し、それ以外の場合は浅いコピーのみを行います)。両方の行の括弧()は初期化の構文です。

関連する問題