2015-10-07 95 views
-2

我在這裏遇到了一些麻煩。我不知道我做錯了什麼。我的bike.cpp類很好。但我認爲問題出在bike_shed類,我遇到了「park」和「checklegal」方法的問題。我們被要求做這樣的事情:「有10個默認構造的自行車對象的私有數組BikeShed該類的類應該具有以下公共方法:由編譯器提供Objects Array - C++

  • 一個默認的構造BikeShed() 。
  • 函數布爾公園(常量自行車&)增加了一個自行車可用 現場並返回true,如果BikeShed已滿,則函數返回 假。

  • 函數自行車刪除(常量字符串& int),重新移動並返回 與給定名稱的所有者的第一輛自行車。如果找到這樣的自行車不是 ,則該功能返回一輛自行車「無」。

  • 一個函數bool checkLegal(),如果所有非「None」的自行車 合法,它將返回true。如果發現一輛自行車違章 打印一條信息打印自行車。 。

  • 一個函數void print()函數,打印所有的自行車與業主 不是 「無」 等」

這裏是我的代碼:

這裏是bike_shed.cpp文件

#include <iostream> 
#include "bike_shed.h" 
#include "Bike.h" 

using namespace std; 

void bike_shed::print(){ 

    cout<< "Bike: " << sizeof(Bike) <<endl; 

} 

bool bike_shed::checkLegal() { 

    Bike bike1; 

    if(bike1.getOwner() == "None"){ 
     return false; 
    } 
    else{ 
     return true; 
    } 

} 

//Bike bike_shed::remove(const string&, int) { 
// 
// 
//} 

bool bike_shed::park(const Bike&) { 

     if (sizeof(Bike) > 10) { 
      return false; 
     } 

} 

這裏是Bike.cpp文件

#include "Bike.h" 
#include <iostream> 

using namespace std; 


void Bike::setNLight(int _light) { 
    d_nLight = _light; 
} 

void Bike::setBell(bool _bell) { 
d_bell = _bell; 
} 

void Bike::setOwner(string _owner) { 
d_owner = _owner; 
} 

void Bike::setReflector(bool _reflector) { 
    d_reflector = _reflector; 
} 

int Bike::getNLight() { 
    return d_nLight; 
} 

string Bike::getOwner() { 
    return d_owner; 
} 

bool Bike:: hasReflector() { 

    if (d_reflector == true) { 
     return true; 
    } 
    else { 

     return false; 
    } 
} 

    bool Bike:: hasBell(){ 

     if(d_bell == true) { 
      return true; 
     } 
     else{ 
      return false; 
     } 
    } 

bool Bike::isLegal() { 
    if (d_nLight >= 1 && d_reflector && d_bell) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

void Bike::print() { 
    cout << "Owner: " << d_owner << " Color: " << d_color.Red << " " << d_color.Green << " " << d_color.Blue 
    << " " << " Lights: " << d_nLight << " Bell: " << d_bell << " Reflector: " <<d_reflector << endl; 
} 

Bike::Bike(string name, Color color){ 
    d_owner = name; 
    d_color = color; 
} 

這裏是bike_shed.h文件

#include "Bike.h" 

class bike_shed { 

public: 

bike_shed(); 
bool park(const Bike&); 
Bike remove(const string&, int); 
bool checkLegal(); 
void print(); 


public: 
Bike bike[10];}; 

我會很感激,如果有人能幫助我。謝謝:)

+0

您可能想要澄清remove方法的簽名。 int是什麼?在頂部的描述中,你沒有在'string'和'int'之間加逗號。 –

回答

1

在下面的代碼塊,

if (sizeof(Bike) > 10) { 
     return false; 
    } 

我猜測你想確保你不超過10個自行車停放在車棚。

爲了做到這一點,您需要在park_shed有一個成員變量來指示停放在棚內的自行車的數量。然後,你可以使用:

bool bike_shed::park(const Bike& bike) 
{ 
    if (number_of_parked_bikes < 10) 
    { 
     bikes[number_of_parked_bikes] = bike; 
     ++number_of_parked_bikes; 
     return true; 
    } 
    else 
    { 
     retun false; 
    } 
} 

確保在構造函數初始化number_of_parked_bikes爲零。

checkLegal功能會是這樣的:

// Make it a `const` member function since it does not 
// change anything in bike_shed. 
bool bike_shed::checkLegal() const 
{ 
    bool isLegal = true; 
    for (int i = 0; i < number_of_parked_bikes; ++i) 
    { 
     if (bikes[i].getOwner() == "None") 
     { 
     // No need to check whether this bike is legar or not. 
     } 
     else if (!bikes[i].isLegal()) 
     { 
     isLegal = false; 
     cout << "Illegal bike found.\n"; 
     bikes[i].print(); 
     } 
    } 

    return isLegal; 
} 
+0

拆卸自行車時,您可能還需要壓縮陣列。簡單的做法是將最後一個元素交換到已刪除元素的位置(或者,如果已刪除元素是最後一個元素,則不執行任何操作)。這是因爲在這個答案中隱含的假設是「自行車數量」是新車總是添加的地方,這並不是一個錯誤的假設。 –

+0

你的意思是在pard_shed中有一個成員變量。我只是做,自行車park_shed; ? – user3242013

+0

在'park_shed'類中,在'Bike bike [10];'之後添加一行'int number_of_parked_bikes;'。 –

0

在方法checkLegal(),你可能要檢查一個給定的自行車是否有效不插入之前,所以你可以寫這樣的:

bool bike_shed::checkLegal(const Bike &bike1) { 

    if(bike1.getOwner() == "None"){ // or maybe bike1.isLegal() 
     return false; 
    } 
    else{ 
     return true; 
    } 
} 

此外,如果你想打印在bike_shed你可能想寫點東西像所有的自行車:

void bike_shed::print(){ 

    for (int iBike = 0; iBike < nbBikes < iBike++) 
     bike[iBike].print(); 

} 
+0

爲什麼你將Const Bike&bike1添加到checkLegal方法?它不應該採取任何參數。 – user3242013

+0

以及變量nbBikes,那是什麼?是自行車還是自行車類型?像,自行車nbBikes;或bike_shed nbBikes; ? – user3242013

+0

如果我爲checkLegal做了這樣的事情,我得到一個錯誤,說「在常量函數上調用非常量函數getOwner'。 – user3242013