C++静态结构体数据成员的初始化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++静态结构体数据成员的初始化相关的知识,希望对你有一定的参考价值。

#include<iostream>
using namespace std;

struct consumer

int num;
char name[18];
char password[26];
long yu_e;
;

class ATM

public:
void in();
void out();
void changeP();
void check();
void give();
private:
static consumer orange[5];
;
我想对静态的结构体成员进行初始化,应该如何进行呢?

静态成员初始化,只能在类外以全局的方式进行,不能在类中完成.
#include<iostream>
using namespace std;

struct consumer

int num;
char name[18];
char password[26];
long yu_e;
;

class ATM

public:
void in();
void out();
void changeP();
void check();
void give();
private:
static consumer orange[5];
;
/*注意是在类的外面,就像定义全局变量一样*/
consumer ATM::orange[5]=0, "zhangshang", "098988", 100,
......
4,"wuhai","2222",99
;
参考技术A 静态成员初始化,只能在类外以全局的方式进行,不能在类中完成.
#include<iostream>
using namespace std;
//定义一个结构体
struct consumer

int num;
char name[18];
char password[26];
long yu_e;
;

class ATM

public:
void in();
void out();
void changeP();
void check();
void give();
private:
static consumer orange[5];
;
/*注意是在类的外面,就像定义全局变量一样*/
consumer ATM::orange[5]=0, "zhangshang", "098988", 100,
......
4,"wuhai","2222",99
;
参考技术B 在cpp中写入如下语句:
consumer ATM::orange[] =
0, "A", "A", 100,
1, "B", "B", 100,
2, "C", "C", 100,
3, "D", "D", 100,
4, "E", "E", 100;
参考技术C 它和普通数据成员的初始化不同,静态数据成员要在类外初始化,并且在定义这个类的对象之前初始化。通常在主函数之前

C++ 如何将一个静态结构体数组初始化?


struct MyStruct

CString name;
int a;
;
class A

public:
static struct MyStruct myStruct[10][1];
;

1. 写构造函数来 给默认值
你这个是C++ 的语法,C++ 中 结构体和类的使用是等同的 只有细微的差别 所以他可以有构造函数

2.自己赋值 满足自己的初始需要 比 构造函数灵活点 方法:
struct MyStruct

string name;
int a;
;
class A

public:
static struct MyStruct myStruct[10][1];
;
MyStruct A::myStruct[10][1] = "123",1,"123",1,"123",1,"123",1,"123",1,"123",1,"123",1,"123",1,"123",1,"123",1;

在类外面这样赋值就可以了
调用的时候:
int main()

cout<< A::myStruct[0][0].name.c_str();
getchar();
return 0;


我实在linux 给你调试的 所以 CString 改为了 string 你改回去就可以了 测试OK ,望采纳~~追问

嗯哪,谢谢~不过可不可以不都写完10个?
MyStruct A::myStruct[10][1] = "123",1,;这样? 我试试~

追答

是不可以的,结构体的赋值 和 数组的赋值不一样, 如果你是想让每一个初始化成一样的值 ,那么建议你实现结构体的构造函数

struct MyStruct

string name;
int a;
MyStruct()


name = "123";

a = 1;


;

参考技术A   结构体也可以有构造函数,用默认构造函数就可以在new数组的时候初始化。
  如果需要成员有初始值,则需要写构造函数,否则直接memset初始化为0即可。
  参考如下:
  struct _tagA
  
  int a1;

  _tagA()
  a1 = 1;
  a[100];
  memset(&a, 0, sizeof(a));
参考技术B struct有个构造函数就行了。。。追问

struct 好像是不能有构造函数的

追答

C++可以有,还能有成员函数,私有成员和公共成员,运算符重载都行。。。Struct的成员默认的都是公有的,类全是默认私有,区别仅此而已,其他的貌似和类没区别(反正我没发现),他也可以继承一个类。。。

参考技术C #include<iostream>
#include<string>
using namespace std;
struct MyStruct

string name;
int a;
;
class A

public:
static MyStruct myStruct[3];
;
MyStruct A::myStruct[3]="xiao",1,"ji",2,"ba",3;
int main()

A a;
cout << a.myStruct[0].name << a.myStruct[0].a << endl;
参考技术D 直接赋值不久行了吗

以上是关于C++静态结构体数据成员的初始化的主要内容,如果未能解决你的问题,请参考以下文章

C++ 全局 静态结构体变量的初始化

C++ 介绍——自定义数据类型

结构体共用体。面试必用

C++文档阅读笔记-Difference Between C Structures and C++ Structures

C++文档阅读笔记-Difference Between C Structures and C++ Structures

C++文档阅读笔记-Difference Between C Structures and C++ Structures