这是我在这个网站上的第一个问题..参考我的朋友,他从这里学到很多东西;),现在轮到我了......:)
亲爱的尊敬的成员..在这一点上,我完全紧张,很沮丧地发现,我应该怎样做我的代码才能工作.. !! 我是一名具有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 :(得分:2)
您没有在构造函数中设置size
成员,因此它具有不确定的值,并且在InputData
中访问它会为您提供未定义的行为。
IntArray(int size)
{
this->size = size;
values = new int[size];
}
更好的是,使用成员初始化列表(它就是它的用途!):
IntArray(int size)
: size(size), values(new int[size])
{ }
您还应该实现析构函数来销毁动态分配的int
s:
~IntArray()
{
delete[] values;
}
看看Rule of Three,看看你是否也应该实现复制构造函数和复制赋值运算符。
答案 1 :(得分:0)
据我在你的问题和答案中的评论可以理解,你的情况非常糟糕:你的导师很糟糕地使用错误的工具来做这个工作(如果他也读这个网站会很有趣)。
它正在教你OOP使用非OOP纯语言(比如C ++)教你喜欢它是Java,从而产生混乱。
所以你最终以错误的方式管理动态内存(ctor中的new [],但没有dtor因此没有删除[]而没有复制和分配 - 因此共享动态数据和潜在的双重删除),有神秘感怀疑函数与参数(关于静态内存(?!?)函数),一个从未告诉基本标准类(如std :: vector)的教师,但假装你使用动态分配数组...
说什么?这很难,很难。
我的建议是停止片刻并尝试阅读更多基于“工业C ++”的教程。 (This one可能非常有用!但请逐页关注!)