【问题标题】:Class constructor and Arrays类构造函数和数组
【发布时间】:2012-03-08 23:26:01
【问题描述】:

我正在为学校做一个项目,但我遇到了一些死胡同。项目的一部分要求我们有一个使用数组的类。我们必须使用数组(遗憾的是我们不能使用向量)。我试图弄清楚如何在运行时在类中构造一个数组。我最初不需要实际放入任何东西,我只需要构造函数来使数组具有一定的大小。非常感谢任何反馈或帮助。这是我到目前为止的类和构造函数。这个项目是用 c++ 完成的。

#pragma once
#include <iostream>
#include <string>
using namespace std;

class Node
{

public:
    int size;
    string container[];

    Node ( int s, string c[]);
};

Node::Node (int s, string c[])
{
    size=s;
        ***I need something here that will give string container[] the size of "size"***
}

提前谢谢你。

【问题讨论】:

  • “(遗憾的是我们不能使用向量)”——从那里逃跑。
  • @Xeo:在某些时候,他们需要学习如何使用数组new和数组delete。如果他们没有 STL 就束手无策,你就不能说你教过他们如何用 C++ 编写代码。
  • @trutheality: calloc 在这里帮不上忙。
  • @StilesCrisis:当然,但这应该是一个单独的话题,而且它似乎与一棵树混为一谈。最好通过构建自己的vector 来单独学习它。
  • @StilesCrisis 好吧,从技术上讲它可以,但是是的,new 更好。

标签: c++ arrays class constructor runtime


【解决方案1】:

你需要一个动态分配的数组:

class Node
{

public:
    int size;
    string* container;

    Node ( int s, string c[])
    {
       container = new string[s];
       //copy c to container
    }
    ~Node ()
    {
       delete[] container;
    }
};

另外,记得释放析构函数中的内存。

【讨论】:

【解决方案2】:

我会使用指针。当您获得尺寸后,只需使用该尺寸调用 new。

char* myArray;

constructor(int size) {
    myArray = new char[size];
}

您还必须在析构函数中调用 delete。

【讨论】:

    【解决方案3】:
    class Node 
    { 
    
    public: 
        int size; 
        string* container; 
    
        Node ( int s, string c[]); 
        ~Node() { if (container != NULL) delete [] container; }
    }; 
    
    Node::Node (int s, string c[]) : container(NULL)
    { 
        size=s; 
        container = new string[size];
        // Copy list values into container
    } 
    

    【讨论】:

    • 为什么是if (container != NULL)?为什么在初始化列表中将container 分配给NULL?
    • 为什么不检查是否为NULL?如果他稍后更改代码以添加构造函数并且不初始化列表怎么办。分配失败怎么办?
    • 如果分配失败,则会引发异常并且不会构造对象,因此不会调用析构函数。 (除非今晚我的记忆力严重下降......)实际上,要担心的是分配成功,但稍后在构造函数中会引发异常。
    • new 是返回 NULL 还是抛出异常取决于内置的环境:msdn.microsoft.com/en-us/magazine/cc164087.aspx。例如,我是一名 Windows/WP OS 开发人员,我们对 new 所做的所有分配都检查为 NULL,而不是异常。
    猜你喜欢
    • 2017-01-21
    • 2021-08-14
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多