类与子类:如何将派生类Fish的数据传递至基类Animal
如何将派生类Fish的数据传递到基类Animal的私有成员中
嘿,我来帮你搞定这个问题!核心点在于:基类的私有成员name是无法被派生类直接访问的,咱们得借助基类提供的公共接口(比如构造函数或者setter方法)来完成数据传递。下面给你两种实用的实现方案:
方案一:通过基类的Setter方法传递数据
这是最灵活的方式,适合在对象创建后动态修改基类的name成员。
步骤1:定义基类Animal,提供Setter和Getter方法
首先得给基类加上能修改和读取私有成员name的公共方法:
#include <iostream> #include <cstring> using namespace std; class Animal { private: char name[50]; // 私有成员,派生类无法直接访问 public: // Setter方法:用于修改name的值 void setName(const char* newName) { strcpy(name, newName); } // Getter方法:用于验证name是否被正确修改 const char* getName() const { return name; } };
步骤2:实现派生类Fish的readFish函数
在Fish类的readFish()方法中,先输入fishname,再调用基类的setName()把数据传进去:
class Fish : public Animal { private: char fishname[50]; public: void readFish() { cout << "请输入鱼的名字:"; cin >> fishname; // 调用基类的Setter方法,将fishname传递给基类的name setName(fishname); } };
步骤3:测试代码
int main() { Fish myFish; myFish.readFish(); cout << "基类Animal中的name值:" << myFish.getName() << endl; return 0; }
方案二:通过构造函数初始化列表传递
如果希望在创建Fish对象时就把名字传给基类,可以用这种方式:
修改基类和派生类的构造函数
class Animal { private: char name[50]; public: // 带参数的构造函数,用于初始化name Animal(const char* animalName) { strcpy(name, animalName); } const char* getName() const { return name; } }; class Fish : public Animal { private: char fishname[50]; public: // 构造函数初始化列表:调用基类的构造函数传递名字 Fish(const char* fn) : Animal(fn) { strcpy(fishname, fn); } // 如果需要后续修改,依然可以结合Setter方法 void readFish() { cout << "请输入新的鱼名:"; cin >> fishname; setName(fishname); // 这里需要基类同时提供Setter方法 } };
额外小贴士
- 建议用C++的
std::string代替char[],既能避免缓冲区溢出的风险,字符串复制也更简单(直接用赋值运算符=就行)。 - 一定要确保基类的访问方法(Setter/构造函数)是
public权限,不然派生类调用不了哦!
内容的提问来源于stack exchange,提问作者Me myself and I
相关产品推荐
相关产品推荐

