#include <iostream> using namespace std; class Animal { private: int age; public: void setAge(int a) { age = a; } int getAge() { return age; } }; class Dog : public Animal { private: string name; public: void setName(string n) { name = n; } string getName() { return name; } }; class Dog_hair : public Animal { private: string hair; public: void sethair(string m) { hair = m; } string gethair() { return hair; } }; int main() { Dog myDog; myDog.setAge(3); myDog.setName("Lucky"); myDog.sethair("roe"); // 父类Animal访问子类Dog的name变量 // cout << "My dog's name is " << static_cast<Dog*>(&myDog)->getName() << endl; cout << "My dog's name is " << myDog.getName() << endl; // 父类Animal访问子类Dog的age变量 cout << "My dog's age is " << myDog.getAge() << endl; return 0; }父类调不到myDog.sethair("roe"); 该咋样解决
时间: 2024-01-17 19:05:53 浏览: 99
在这段代码中,父类 Animal 没有访问子类 Dog_hair 的 sethair 函数的权限,因为这个函数只在子类 Dog_hair 中定义了而不在父类 Animal 中。如果你想要在父类 Animal 中访问子类 Dog_hair 的 sethair 函数,你可以在父类 Animal 中定义一个虚函数,然后在子类 Dog_hair 中重写这个虚函数。
例如,你可以在 Animal 类中定义一个虚函数:
```c++
class Animal {
private:
int age;
public:
void setAge(int a) {
age = a;
}
int getAge() {
return age;
}
virtual void sethair(string m) {}
};
```
在 Dog_hair 类中重写这个虚函数:
```c++
class Dog_hair : public Animal {
private:
string hair;
public:
void sethair(string m) {
hair = m;
}
string gethair() {
return hair;
}
};
```
然后你就可以在主函数中通过父类 Animal 的指针访问子类 Dog_hair 的 sethair 函数了:
```c++
Animal* myDog = new Dog_hair;
myDog->setAge(3);
myDog->sethair("roe");
cout << "My dog's hair is " << static_cast<Dog_hair*>(myDog)->gethair() << endl;
```
注意,这里需要使用动态分配的指针,并且需要使用 static_cast 将其转换为 Dog_hair 类型指针,以便访问子类的 gethair 函数。
阅读全文