2013-04-30 55 views
-4

這是我在這個網站的第一個問題..引用我的朋友,,他從這裏學到很多;),現在它的'我輪到我想.. :)處理指向私有類中的數組的指針。

尊敬的尊敬的成員..在這一點上,我我完全緊張,很沮喪地發現,我該如何處理我的代碼才能工作..! 嗯,我是一名具有C++基礎知識的學生,在本學期我們手中的面向對象編程。 這個任務是爲了闡明類(私有和公共)的概念,此外,初始化,排序數組,尋找密鑰等

我知道,當我們使用動態內存,我們必須編寫構造函數,析構函數等,&我對此感到疑惑..我認爲問題在參數或複製構造函數,深,淺拷貝。 我不知道它應該做什麼! 嗯,我不是專業的先生......所以我很抱歉。 !

如果有人指導我用我的代碼,關於數組,指針類的小例子,我該如何處理。 。 。 :(:(這是非常讚賞的先生。

// Constructor.cpp : Defines the entry point for the console application. 
// 

#include <iostream> 

using namespace std; 

class IntArray 
{ 
private: 

    int size; 
    int *values; 

public: 

    void InputData() const; 
    void OutputData() const; 
    void Search() const; 
    void Bubble() const; 
    IntArray(int size) 
    { 
     values = new int[size]; 
    } 
}; 

void IntArray::InputData() const 
{ 
     cout << "==> Entering Data <==" << endl; 

     for (int i = 0; i < size; ++i) 
     { 
     cout << ">> Enter Element #" << i+1 << ": "; 
     cin >> values[i]; 
     } 
} 

void IntArray::OutputData() const 
{ 
    cout << "==> Printing Data <==" << endl; 
    for (int i = 0; i < size; ++i) 
    { 
     cout << values[i] << " ,"; 
    } 
    cout << "\n"; 
} 
void IntArray::Search() const 
{ 
    int key; 
    cout << "Please Enter A KEY To Find: "; 
    cin >> key; 
    int index = 0; 
    bool found = false; 
    for (int i = 0; i < size; ++i) 
    { 
     if ((!found) && (key == values[i])) 
     { 
      index = i; 
      found = true; 
     } 
    } 
    if (found) 
    { 
     cout << "KEY Found At The Index: " << index+1 << endl; 
    } 
    else 
    { 
     cout << "KEY is not present." << endl; 
    } 
    cout << '\n' << endl; 
} 

void IntArray::Bubble() const 
{ 
    for (int i = 1; i < size; ++i) 
    { 
     for (int j = 0; j < size; ++j) 
     { 

      if (values[j] > values[i]) 
      { 
       int temp = values[j]; 
       values[j] = values[i]; 
       values[i] = temp; 
      } 
     } 
    } 
} 

int main() 
{ 
    const int size = 5; 
    IntArray u(size); 
    u.InputData(); 
    u.OutputData(); 
    u.Search(); 
    u.Bubble(); 
    system("pause"); 
    return 0; 
} 
+0

什麼是您確切的問題?這不是一般性問題的網站,而是針對有針對性的問答。 – eriknelson 2013-04-30 18:30:34

+0

是的兄弟。這段代碼從來沒有給我任何輸出..?! 我不知道該怎麼辦.. – usman 2013-04-30 18:34:26

+0

@ user2337036根本沒有輸出? – 2013-04-30 18:36:20

回答

0

據你的問題和答案中的你的意見,我可以理解你處於一個非常糟糕的境地:你的老師很不情願地使用錯誤的工具來完成工作(如果他讀這個網站爲好)。

它教你使用非OOP純語言(如C++),它教你喜歡它是Java,因此會產生混淆。因此,你最終以錯誤的方式管理動態內存(new [] in ctor,但沒有dtor,因此沒有刪除[],也沒有複製和分配 - 因此共享動態數據和潛在的雙重刪除)關於帶參數的函數的神祕懷疑(關於靜態內存(?!?)函數),與從未講過基本標準類(如std :: vector)但假裝使用動態分配數組的指導員...

說什麼?這很難,很難。

我的建議,停一會兒,然後嘗試閱讀更多「工業C++」的教程。 (This one確實很有用,但是請一頁接一頁!)

+0

是的,我同意:)。謝謝你的寶貴建議。 – usman 2013-04-30 20:15:53

2

你不設置size成員在構造函數,所以它有一個不確定的值,並在InputData訪問它給你未定義行爲。

IntArray(int size) 
{ 
    this->size = size; 
    values = new int[size]; 
} 

更重要的是,使用成員初始化列表(這就是它的功能!):

IntArray(int size) 
    : size(size), values(new int[size]) 
{ } 

你也應該實現一個析構函數,動態所有破壞的int小號ocated陣列:

~IntArray() 
{ 
    delete[] values; 
} 

看看在Rule of Three看到你還應該實現拷貝構造函數和拷貝賦值運算符。

+0

這不是唯一的錯誤。關於三項規則呢?析構函數完全丟失!此外,重要的Q爲什麼不簡單地使用'std :: vector'? – 2013-04-30 18:40:32

+0

先生..直到知道我的教官從來沒有告訴我們有關載體..!我也理解第一個,但第二個成員初始化列表。 !我沒有得到它.. – usman 2013-04-30 18:42:54

+0

哇,它的工作..我不敢相信..非常感謝你.. – usman 2013-04-30 18:49:55