只是为了让每个人都知道。我必须使用char数组作为字符串,这是功课,必须以这种方式完成。这些课程也是在purporse上制作的。
我应该读一条鱼'通过我的Fish类命名,这是Animal类的子类。如果输入长度大于0,那么我将使用char数组参数运行构造函数并更新" fishname"里面的鱼类。如果没有,我将运行不带参数的构造函数(Fish()构造函数)。我的问题:
现在它让我可以选择输入输入,我这样做 - 它会崩溃。造成它的是Fish对象,但不知道为什么。怎么来的?
我如何传输我将要进入的数据" fishname"在Fish数据中,到" name"在动物类?
所以这是我到目前为止所做的,但它只在输入后崩溃。 #包括 使用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;
}
答案 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);
}
};