首页 > 解决方案 > 如何以构造函数在 C++ 中初始化所有类对象的方式从 C 中的结构初始化所有对象?

问题描述

例如,假设我定义了一个 struct emp_t。然后,我希望从该结构创建的所有员工(对象)的 ID = 0、名称 =“空字符串”和薪水 = 0。这可能吗?

struct employee
{
    int id;
    char name [30];
    int salary;
};
typedef struct employee emp_t;

标签: c++cdata-structuresstruct

解决方案


一种明智的做法是通过函数。当你有你的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_ }

推荐阅读