2014-02-12 75 views
0

我想按名稱排序指向對象的指針數組,但我不知道我是否正確的方式與此。這是到目前爲止我的代碼...排序指針數組到對象

主要

Person *personArray[3]; //pointers to person objects 

personArray[0] = new Employee("Bill", 1200); 
personArray[1] = new Customer("Steve"); 
personArray[2] = new Employee("Bill", 1200); 

Person *tempArray[3]; 
string temp1; 

for(int i=3-1;i>0;i--) 
{ 
    int min = 0; 
    for(int j=1;j<i;j++) 
    { 
     if(*tempArray[j] < *personArray[min]) 
     { 
      min = j; 
     } 
    } 
    temp1 = tempArray[min]->printname(); 
    tempArray[min] = tempArray[i]; 
    tempArray[i] = temp1; 
} 

class Person 
    { 
    public: 
     Person(string); 
     virtual void printname() = 0; 
     bool operator <(const Person& name1) const; 
     bool operator ==(const Person& name1) const; 

    protected: 
     string name; 
    }; 

    bool Person::operator <(const Person& name1) const 
    { 
     return (this->name < name1.name); 
    } 
    bool Person::operator ==(const Person& name1) const 
    { 
     return (this->name == name1.name); 
    } 

    void Person::printname() 
    { 
     cout << "Name: " << name << endl; 
    } 
+1

您允許使用標準庫算法嗎?如果是這樣,請使用帶有自定義謂詞的'std:sort'。 – juanchopanza

+0

我不這麼認爲,我們被告知要查找字符串::比較並使用重載操作符 – Brumbles

回答

1

我覺得這條線的問題是:

if(*tempArray[j] < *personArray[min]) 

它應該是:

if(*personArray[j] < *personArray[min]) 

因爲tempArray不是招目前尚未初始化。

更重要的是,一個臨時對象應該是足夠的,而不是整個數組。

而且這些線路...

temp1 = tempArray[min]->printname(); 
tempArray[min] = tempArray[i]; 
tempArray[i] = temp1; 

了。 tempArray無關,應該是這樣的:

temp1 = personArray[min]->printname(); 
personArray[min] = personArray[i]; 
personArray[i] = temp1; 

BTW,temp1應該是同一類型的對象(不是字符串)。

+0

如何在不同的派生類中使用臨時對象? – Brumbles

+0

嘗試使用'Person'指針,我認爲其他對象來自此。不是嗎? – rendon

+0

是的,但人是一個抽象類,不能實例化 – Brumbles