c++ - 如何以构造函数在 C++ 中初始化所有类对象的方式从 C 中的结构初始化所有对象?
问题描述
例如,假设我定义了一个 struct emp_t
。然后,我希望从该结构创建的所有员工(对象)的 ID = 0、名称 =“空字符串”和薪水 = 0。这可能吗?
struct employee
{
int id;
char name [30];
int salary;
};
typedef struct employee emp_t;
解决方案
一种明智的做法是通过函数。当你有你的employee
结构时,你可以这样做:
void employee_init(struct employee* p)
{
p->id = 0;
p->name[0] = '\0';
p->salary = 2000;
}
您还可以使用一个简单的宏:
#include <stdio.h>
typedef struct {
int id;
char name[30];
int salary;
} Employee;
#define EMPLOYEE(var) \
Employee var; \
var.id = 0; \
var.name[0] = '\0'; \
var.salary = 0;
int main()
{
EMPLOYEE(john);
printf("%d %s %d\n", john.id, john.name, john.salary);
return 0;
}
或将两者结合起来:
#define EMPLOYEE(var) \
Employee var; \
employee_init(&var);
当你使用malloc()
:
#define EMPLOYEE_DYN(var, n) \
Employee* var = malloc(sizeof(Employee) * n); \
employee_init(var);
从 C99 开始,您还可以执行以下操作:
#define EMPLOYEE(var) \
Employee var = { .id = 0, .name = "", .salary = 0 }
更多类似构造函数的宏(在这种情况下#include <string.h>
将需要):
#define EMPLOYEE(var, id_, name_, salary_) \
Employee var; \
var.id = id_; \
strcpy(var.name, name_); \
var.salary = salary_;
或使用指定的初始化程序:
#define EMPLOYEE(var, id_, name_, salary_) \
Employee var = { .id = id_, .name = name_, .salary = salary_ }
推荐阅读
- angular - NgSwitch - 行为出乎意料,`No provider for NgSwitch` - 出现异常
- solace - 只有当它有一个活跃的订阅者时才会创建安慰主题吗?
- jquery - 将鼠标悬停在滑块的左侧或右侧时,如何将光标转向左侧或右侧图标?
- javascript - 如何为表单生成动态唯一 ID,该表单是弹出表单以评论每篇文章但它获取最后一篇文章 ID
- angular - Ionic 4 应用程序不能作为 Electron 应用程序运行
- javascript - 如何从前端订购一系列 api 调用?
- angular - 为 Angular 链下拉菜单设置默认值
- sql - 如何根据匹配数组中包含的值执行 INNER JOIN,该数组本身就是表的字段?
- tsql - 尝试使用 MAX 列解决方案将多行 ROLL-UP 成单行但不起作用
- odata - 如何使用 DataServiceContext 调用接受实体引用参数的未绑定操作?