带有字符串(使用char数组)参数的构造函数

Constructor with string (using char array) parameter

本文关键字:参数 构造函数 数组 char 字符串 使用      更新时间:2023-10-16

只是为了使每个人都知道。i 必须使用char数组进行字符串,这是家庭作业,必须这样做。另外类是在purporse上进行的。

我应该通过我的鱼类读一条鱼的名字,这是动物类的子类。如果输入长度大于0,则我将使用Char Array参数运行构造函数,并更新Fish Inside Fish类。如果没有,我将在没有参数(FISH((构造函数(的情况下运行构造函数。

我的问题:

  1. 现在,它使我可以选择在输入中写入,我这样做 - 它崩溃了。这是引起它的鱼类物体,但不知道为什么。怎么来?

  2. 我将如何将我的数据传输到鱼类数据中的"渔名"中,并在动物类中"名称"?

所以这就是我到目前为止所做的,但是只有在输入后才崩溃。 #包括使用名称空间std;

#include <iostream>
 using namespace std;
class Animal {
private:
    char* name;
public:
    Animal() { strcpy(name, ""); }          // Constructors that set name to nothing
    void writeName() { cout << name; }      // Function to read an animal's name
};
class Fish : public Animal {
private: 
    char* fishname;
public:
    Fish() {}
    Fish(const char* name) { strcpy(fishname, name); } 
};
int main() {
    char fishname[20];
    cout << "Read fish's name: "; cin.ignore();
    cin.getline(fishname, 20);
    if(strlen(fishname) > 0) Fish f1(fishname);
    else Fish f1;
    return 0;
}

关于您可以做的最好的

,缺乏实现STD :: String的许多功能是使用固定大小的char数组。这不是不是一个好习惯。我通常不会这样做,但我会怜悯。

#include <iostream>
#include <cassert>
using namespace std; // NEVER write this in a header file. Just saying.
class Animal {
public:
    static const int max_name = 128;
    Animal() { 
        name[0] = 0;
    }        
    void writeName() { cout << name; }      // Function to read an animal's name
private:
    char name[max_name];
};
class Fish : public Animal {
private:
    char fishname[Animal::max_name];
public:
    Fish() {
        fishname[0] = 0;
    }
    Fish(const char* name) { 
        assert(strlen(name) < Animal::max_name);
        strcpy(fishname, name);
    }
};