
C++类中怎样对数组用构造函数初始化
classCCpu{public:CCpu(charname[],charlevel[],intprice);private:charcpufactoryname[10]...
class CCpu
{
public:
CCpu(char name[],char level[],int price);
private:
char cpufactoryname[10];
char cpulevel[10];
int cpuprice;
};
CCpu::CCpu(char name[], char level[], int price)
{
memcpy(cpufactoryname,name,10);
memcpy(cpulevel,level,10);
cpuprice=price;
}
此时在另一个类中调用它的对象
class CComputer
{
CCpu cpu("ds","dfs",100);
};显示出错
但是如果是在主函数中调用则没有错误,这是为什么?
但是CCpu类和CComputer没有在一个文件中 展开
{
public:
CCpu(char name[],char level[],int price);
private:
char cpufactoryname[10];
char cpulevel[10];
int cpuprice;
};
CCpu::CCpu(char name[], char level[], int price)
{
memcpy(cpufactoryname,name,10);
memcpy(cpulevel,level,10);
cpuprice=price;
}
此时在另一个类中调用它的对象
class CComputer
{
CCpu cpu("ds","dfs",100);
};显示出错
但是如果是在主函数中调用则没有错误,这是为什么?
但是CCpu类和CComputer没有在一个文件中 展开
展开全部
有两种方法,一种是使用初始化列表,一种是C++11提供的类内初始化。初始化的参数通常为列表,即数组的列表初始化,对于char数组还可以用字符串字面值作为初始化的参数。
数组通常使用列表进行初始化,如果列表元素小于数组大小,则剩下的元素默认初始化(对于函数内的内置类型,其值不确定):
int main()
{
int a[3] = {0, 0, 0};
int b[] = {0, 0, 0};
int c[3] = {0} //c[0]=0,c[1]和c[2]值不确定,依赖于编译器。
return 0;
}
在类里也可以用列表来初始化:
#include <iostream>
struct A {
// C++11新特性,当构造函数未初始化某个元素时,初始化为类内初始值
int a[3] = {0, 0, 0};
A() = default; //C++11新特性,指出由编译器来合成默认构造函数
A(int x, int y, int z) : a({x, y, z}) {}
};
int main() {
A a;
std::cout << a.a[0]; //0
A b(1, 1, 1);
std::cout << b.a[0]; //1
return 0;
}
特殊地,char数组可以用字符串字面值来初始化:
struct A {
char s[6] = "hello"; //必须预留一个'\0',因此s的大小至少为6
};
展开全部
错误的原因是你在类定义里面做得初始化,把初始化部分放在类CComputer的构造函数里就ok了。
初始化的位置错误,我说得绝对没问题,可以在类定义中声明类,但是初始化一定要放在成员函数里。
初始化的位置错误,我说得绝对没问题,可以在类定义中声明类,但是初始化一定要放在成员函数里。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
另一个类调用他的对象 是否在另一个类声明了它或把那个类的文件包含进来?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询