2013-04-30 49 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