Ⅰ C++中对象数组的初始化问题
//当有自定义构造函数时,必须要有一个没参数的构造函数
#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>
using namespace std;
class Stu
{
public :
Stu(); //必须要有
Stu(string name);
private:
string mName;
};
Stu::Stu()
{
}
Stu::Stu(string name)
{
mName = name;
}
void main()
{
Stu stu[10];
for(int i = 0; i < 10; ++i)
{
stu[i] = Stu("test");
}
}
Ⅱ 数组或对象经过编译后变成什么了。
数组 在程序层面 是一个标示符 该标示符表示了地址以及对该内存的数据访问形式 在内存区 分配了一块内存
对象 拥有函数区和成员区 对c++ 不熟 不过基本上对数据的访问都是类似的
Ⅲ c++中 关于对象数组的 我写的这个程序怎么编译不过啊 请大家 帮着看看 谢谢 多谢啊
你这个程序里面有两个错误
1,Box (int h=10,int w=12,int len=15)的int h=10后的逗号是中文输入的逗号,需要改成英文输入的逗号
2,如果你使用的是#include<iostream.h>则不需要下面的using namespace std;,如果你要使用下面的using namespace std;则上面包含的应该是#include<iostream>,这两种是不同的。
#include <iostream>//#include<iostream.h>
using namespace std;
class Box
{public:
Box (int h=10,int w=12,int len=15):height(h),width(w),length(len)
{}//Box (int h=10,int w=12,int len=15)
int volume();
private:
int height;
int width;
int length;
};
int Box::volume()
{return(height*width*length);
}
int main()
{Box a[3]={Box(10,12,15),
Box(15,18,20),
Box(16,20,26)};
cout<<"volume of a[0] is "<<a[0].volume()<<endl;
cout<<"volume of a[1] is "<<a[1].volume()<<endl;
cout<<"volume of a[2] is "<<a[2].volume()<<endl;
return 0;
}
下面是main方法的代码:
public static void main(String[] args)
{
Alone6_2 [] ob = new Alone6_2[10];
//建立第一个符合条件的对象
Alone6_2 a1 = new Alone6_2();
a1.setAB(1, 2);
//把这个对象放入数组第一个
ob[0] = a1;
//第一个对象上面建立,下面用循环生成剩下的9个
for (int i = 1; i < ob.length; i++)
{
//先新建出对象
Alone6_2 a = new Alone6_2();
//满足要求
int aFiled = ob[i-1].getA() + ob[i-1].getB();
int bFiled = ob[i-1].getA() * ob[i-1].getB();
//设置新建出来对象的a,属性
a.setAB(aFiled, bFiled);
//放入数组
ob[i] = a;
}
//开始输出数组,其实可以在上面的循环中,输出,
//为了清晰,这里在全部建立完对象后再循环一次输出
for (int i = 0; i < ob.length; i++)
{
Alone6_2 a = ob[i];
System.out.println("ob["+i+"]="+a.getA()+",ob["+i+"]="+a.getB());
}
}
注释已经说明了大部分,如果还有疑问可以继续讨论。
输出结果是:
ob[0]=1,ob[0]=2
ob[1]=3,ob[1]=2
ob[2]=5,ob[2]=6
ob[3]=11,ob[3]=30
ob[4]=41,ob[4]=330
ob[5]=371,ob[5]=13530
ob[6]=13901,ob[6]=5019630
ob[7]=5033531,ob[7]=1058399894
ob[8]=1063433425,ob[8]=-1642014574
ob[9]=-578581149,ob[9]=117143346
PS:后面几个出现负数,是因为int型的溢出了,题目的意思已经符合了。简单的解决办法是讲Alone对象中的a,b换成long类型即可
Ⅳ C++对象数组创建编译错误
要想创建数组:
必须有完整的类定义
类必须有不带参数的默认构造函数
因此
检查是否有不带参的构造函数
成员函数要用对象数组,那么在类的定义里声明这个成员函数,而不是定义这个函数(即不写函数体),直到整个类被完全定义。然后写成员函数的定义。
Ⅵ c++编程:对象数组
//class Object;
Object one, two, three;
Object array[3]={one, two, three}; //对象数据赋初值
Ⅶ c++怎么在头文件中定义对象数组,而在各个cpp文件中使用,而编译链接时不会提示重复定义
在你的头文件这么写
#ifndef XXX
#define XXX
你的代码
#endif
目的是让这个头文件只被包含一次,就不会提示重复定义了。
Ⅷ 对象数组的数组
关于可变长数组(VLA)的问题:原来的C标准中是不允许可变长数组出现的,也就是你说的那个n可变。但是在C99中,加入了对VLA的支持,也有不少编译器已经支持这个了,而且好像没有太多的人用这个可变长数组。
如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。
此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
一个数组中的所有元素具有相同的数据类型(在在C、C++、Java中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、 字符串 、数值等等)。 可以声明任何基本数据类型的数组,包括用户自定义类型(请参阅 “再论编程”中的“创建自己的数据类型”)和对象变量(请参阅“用对象编程”)。
如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。
compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。
原型可以这样写(假设数组的元素是type):
int compact(type *Array,int Count)
数组类型说明 在C语言中使用数组必须先进行类型说明。
数组说明的一般形式为: 类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 int a[10]; 说明整型数组a,有10个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch,有20个元素。
Ⅸ java对象数组问题
BiTreeNode[] bitreenode=new BiTreeNode[n]; 如果改成
BiTreeNode[] bitreenode;会出现编译错误,因为bitreenode没有初始化,并没有创建实例,java会强制限制禁止没有初始化的情况,但你可用=null初始化,到后面进行赋值。如果是对象数组,后面调用bitreenode时别忘了初始化对象,比如bitreenode=new BiTreeNode[3];否则执行bitreenode[i] = new BiTreeNode(s, bitreenode[l], bitreenode[r]);时出现空错误,试问:i到底是多少好呢?答案是任何整数都不行,必须初始化bitreenode对象数组。
略过这一点,从上面的代码看来,执行是可能发生数组越界异常,因为从
BiTreeNode[] bitreenode=new BiTreeNode[n]; 看来,调用bitreenode[i]时,i的取值范围为[0,n-1],后面有bitreenode[i]=new BiTreeNode(s,bitreenode[l],bitreenode[r]);之类的语句,也就是说从控制台输入的数字也就是后来赋值给l或r的那些数据不能超过这个范围!当然,如果不小心n<=0,运行时执行到调用bitreenode[i]时立即发生数组越界异常。如果保证从控制台输入的数字在[0,n-1],理论上是可以得到预想输出结果的。
Ⅹ C++编程:对象数组
你确定是对象数组的指针,而不是对象指针的数组?
假设类名叫Object
对象的数组的指针:
Object objects[100];
Object (*pObjects)[100]; // 就是它
pObjects = &objects; // 必须与objects的长度相同才能这样赋值
对象指针的数组:
Object* objects[100];
满意请采纳。