为类/结构创建多个对象?

时间:2011-10-06 08:14:48

标签: c++ class object structure

我有一个问题。是否可以在运行时为类或结构创建多个对象?

#include<iostream>
#include<conio.h>
using namespace std;
struct node
{
       int no;
};

int main()
{
   int i;
   for(i=0;i<4;i++)
   {
                   struct node s[i];
   }
   cout<<"Enter the values";
   for(i=0;i<4;i++)
   {
                   cin>>s[i].no;
   }
   cout<<"The values are:";
   for(i=0;i<4;i++)
   {
                   cout<<s[i].no<<endl;
   }
   getch();
   return 0;
}

我尝试了上面的方法,但没有成功。任何帮助将不胜感激

4 个答案:

答案 0 :(得分:4)

替换

for(i=0;i<4;i++)
{
       struct node s[i];
}

 struct node s[4];

你编写程序的方式不起作用。您在块内定义了节点数组,因此它不会在该块之外可见。

如果要动态分配内存,则必须执行以下操作:

 struct node *s = new node[YourDesiredSize];

或者你喜欢c风格(不推荐):

 struct node *s;
 s = (node*)malloc(YourDesiredSize * sizeof (node));

并且不要忘记释放记忆。

答案 1 :(得分:1)

for(i=0;i<4;i++)
{
 struct node s[i];
}

在这里,您可以在for循环中创建一个节点数组。这是本地的,仅在for循环中可用。此外,由于我不是一个常量表达式,因此无法编译。但即使你使用new运算符来分配数组,它也只能在for循环中使用。

相反,你应该在其他地方声明你的数组:

 node s[4];

这将通过调用节点的默认c'tor来创建大小为4的数组。那么你的代码应该可以工作。

答案 2 :(得分:1)

如果要在运行时创建结构或类的实例,则需要使用 new 运算符。

struct node* n = new n[4]; // creates an array of 4 node structs

for( int i=0; i<4; ++i )
{
  n[i]->no = i;
}

由于这是动态分配的内存,因此当不再需要结构时,您负责释放它。

delete[] n; // free dynamically allocated memory - the brackets are needed because this an array

答案 3 :(得分:0)

如果您知道它们的数量,可以使用本机的实例数组(结构或类),或者如果不知道,可以使用列表或向量等集合。

.bootstrap-datetimepicker-widget table td.active:hover{
    background-color: #337ab7; 
    color:#fff;
}
.bootstrap-datetimepicker-widget button:hover{
    background-color: #337ab7; 
    color:#fff;
}