用绳子练习
Exercise with string
本文关键字:练习 更新时间:2023-10-16
我在这里找到的练习 3 有问题。我在这里报告。
#include <iostream>
#include <cstring>
using namespace std;
class Animal
{
protected:
int age;
char name[10];
public:
void set_data (int a, char b[10]) // the set data is inherited by here to the two classes Zebra and Dolphin
{
age = a;
strcpy(b,name);
}
};
class Zebra:public Animal
{
public:
void message_zebra() {
cout<< "The zebra named "<< name <<" is "<< age << " years old. The zebra comes from Africa. n";
}
};
class Dolphin: public Animal
{
public:
void message_dolphin() {
cout<< "The dolphin named "<< name << " is "<<age << " years old. The dolphin comes from New Zeland.n";
}
};
int main ()
{
Zebra zeb;
Dolphin dol;
char n1[10] = "Max";
char n2[10] = "John";
zeb.set_data (5,n1);
dol.set_data (2,n2);
zeb.message_zebra() ;
dol.message_dolphin() ;
return 0;
}
原则上,我有两个基类继承类Animal
的专有性,但是当我在主类中运行时,我无法显示两个动物的正确名称。
无论您的特定错误如何(评论者建议的参数顺序strcpy()
(,问题定义和解决方案都存在一些问题。
习题3
用母类动物写一个probram。在它里面定义一个名称和一个年龄变量,以及
set_value()
函数。然后创建两个碱基变量斑马和海豚,它们写一条消息,告诉年龄,名称并提供一些额外的信息(例如出生地(。
关于这个问题,我们注意到的第一件事是措辞含糊不清。到底什么是"基础变量"?您是否被要求Animal
子类?谁知道呢。至于原产地——是特定实例的"起源",还是整个阶级?而且 - 是Animal
类还是继承子类?谁知道呢。
此外,set_value()
成员函数确实是一件非常糟糕的事情。即使您的成员不是公开的,您仍然可以为每个字段使用单独的 setter 方法,例如void setName(const std::string& name)
.当然,使用引用或代理来设置和获取字段会更好,例如std::string& name()
和const std::string& name() const
.
现在,关于你自己的代码,请注意斑马和海豚类实际上并没有不同的行为;它们的"消息"成员打印相同的东西,除了类名和原产地,它们是不同的数据。那么为什么还要为子类而烦恼呢?
此外,使用char
数组不是一个好主意 - 除非有充分的理由不这样做,否则请使用std::string
。这样,您就不会对名称长度进行人为限制。
相关文章:
- 加速C++练习2.4
- C++ 独特指针练习的向量
- 转换器练习:跳过 if 语句和 if 语句
- 节目练习直播C++
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 我正在尝试一个傻瓜 C++ 练习,我遇到了一个错误,说类 'GraduateStudent' 没有任何名为 'advisor' 的字段
- 练习多线程
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- C++ 随机数的字符串练习
- 进行 SFINAE 练习时编译错误
- 用 X 替换字符串中的字符C++练习
- 在C++中使用全局变量进行练习
- 是回文作业练习
- C++原理和练习练习-从输入值n中寻找素数
- 我在LeetCode练习时遇到了一些奇怪的错误
- 贝金纳C++练习解决方案的意外输出
- 练习循环和使用循环 1 次以及如何获取数组的最大值
- 对"车辆的 vtable"的未定义引用 - 面向对象的编程练习
- 用绳子练习
- 英里到千克转换器练习的小语法错误