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

时间:2018-02-06 20:18:45

标签: c++ class constructor

只是为了让每个人都知道。我必须使用char数组作为字符串,这是功课,必须以这种方式完成。这些课程也是在purporse上制作的。

我应该读一条鱼'通过我的Fish类命名,这是Animal类的子类。如果输入长度大于0,那么我将使用char数组参数运行构造函数并更新" fishname"里面的鱼类。如果没有,我将运行不带参数的构造函数(Fish()构造函数)。

我的问题:

  1. 现在它让我可以选择输入输入,我这样做 - 它会崩溃。造成它的是Fish对象,但不知道为什么。怎么来的?

  2. 我如何传输我将要进入的数据" fishname"在Fish数据中,到" name"在动物类?

  3. 所以这是我到目前为止所做的,但它只在输入后崩溃。      #包括 使用namespace 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;
    }
    

1 个答案:

答案 0 :(得分: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);
    }

};