使用类 c++ 中的构造函数为 char 数组提供默认值

Giving a char array a default value with a constructor in a class c++

本文关键字:数组 char 默认值 构造函数 c++      更新时间:2023-10-16

我正在编写一个小程序,它接受用户的输入。输入是一个整数,对于学生的数字,2 个双精度数作为成绩,以及研究领域,它必须是最大大小为 20 的字符数组。现在在编写类时,我不太确定如何在构造函数中为字符数组提供默认值。

这是我用类和构造函数编写的内容。

class nemandi
{
public:
    nemandi(int num, double g1, double g2, char field[]);
    void birta();
    friend bool operator <(nemandi& nem1, nemandi& nem2);
private:
    int studentNumber;
    double grade1;
    double grade2;
    double medaltal();
    char fieldOfStudy[20];
};

nemandi::nemandi(int num, double g1, double g2, char field[])
{
    studentNumber = num;
    grade1 = g1;
    grade2 = g2;
    fieldOfStudy[20] = field[20];
}

这行不通,我无法在网上找到解决方案。谁能指出如何在构造函数中为 char 数组提供默认值的正确方向?

提前感谢!

编辑:用memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));替换fieldOfStudy[20] = field[20];做到了!感谢您帮助伙计们:)

fieldOfStudy[20] = field[20];

您只需将位置 20 的字符从字段分配到研究字段。改用memcpy:

memcpy(fieldOfStudy, field, sizeof(fieldOfStudy));

此行fieldOfStudy[20] = field[20];char fieldOfStudy中位置 20 设置为field中位置 20 的char值。

请记住,fieldOfStudy 是指向 char 的指针,char fieldOfStudy[20]只是告诉编译器,在 fieldOfStudy 指向的指针之后还会有 19 个char

字符数组不能按照你想要的方式使用赋值和比较运算符,这就是创建 std::string 类的原因。

nemandi::nemandi(int num, double eink1, double eink2, const std::string& lina)
{
    studentNumber = num;
    einkun1 = eink1;
    einkun2 = eink2;
    namslina = lina;
}

nemandi::nemandi(int num, double eink1, double eink2, const std::string& lina)
    : studentNumber(num)
    , einkun1 (eink1)
    , einkun2 (eink2)
    , namslina (lina)
{
}

如果你的情况需要数组,那么你必须使用类似memcpy的东西来复制数据

nemandi::nemandi(int num, double eink1, double eink2, char lina[])
    : studentNumber(num)
    , einkun1 (eink1)
    , einkun2 (eink2)
{
    memcpy(namslina, lina, sizeof(namslina));
}

如果您始终希望复制 20 个字符并且您可以确保参数至少那么长,则此方法有效。 如果您使用的是 C 样式的 null 终止字符串,则应使用"strcpy"。

如果需要在

类构造函数中按默认值初始化 c-string,则可以执行以下操作:

class A {
  char str[20];
public:
  A() {
    // `def_str` will be created only once upon
    // construction of first `A` instance 
    static char const def_str[] = "default string";
    strcpy(str, def_str);
  }