子类指针指向基类对象
时间: 2023-11-02 21:56:16 浏览: 40
如果子类指针指向基类对象,只能访问基类中的成员变量,无法直接访问子类中的成员变量。这是因为子类的成员变量只在子类中定义,而基类对象中只包含基类的成员变量。
如果你确实需要访问子类的成员变量,可以通过将基类指针转换为子类指针来实现。这个过程称为向下转型。需要注意的是,向下转型只在子类指针指向的对象实际上是子类对象时才安全。否则,将会导致未定义的行为。
以下是一个示例代码,演示了如何通过向下转型来访问子类的成员变量:
```cpp
#include <iostream>
class
相关问题
基类指针指向子类对象
在 C++ 中,可以使用基类指针指向子类对象。这种情况下,如果基类中定义了虚函数,那么在通过基类指针调用该虚函数时,实际上会根据子类对象的类型来调用对应的重载函数,这就实现了多态性。
举个例子,假设有一个基类 Animal,其中定义了一个虚函数 sound(),然后有两个子类 Dog 和 Cat 继承自 Animal 并分别重载了 sound() 函数。那么在使用基类指针指向 Dog 或 Cat 对象时,可以通过调用 sound() 函数来触发多态性,实际上将会调用对应的子类的 sound() 函数。
示例代码如下:
```
class Animal {
public:
virtual void sound() {
cout << "This is the sound of an animal." << endl;
}
};
class Dog : public Animal {
public:
void sound() {
cout << "This is the sound of a dog." << endl;
}
};
class Cat : public Animal {
public:
void sound() {
cout << "This is the sound of a cat." << endl;
}
};
int main() {
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
animal1->sound(); // 输出 This is the sound of a dog.
animal2->sound(); // 输出 This is the sound of a cat.
return 0;
}
```
在上面的示例中,animal1 和 animal2 都是基类 Animal 的指针,但是它们分别指向了 Dog 和 Cat 的对象。当调用它们的 sound() 函数时,实际上会触发相应子类的函数,从而实现了多态性。
基类指针指向子类对象的意义是什么呢
基类指针指向子类对象的意义在于实现多态性。通过将基类指针指向子类对象,可以让程序在运行时根据指针所指向的实际对象类型来动态地确定调用哪个函数,从而实现不同对象对同一消息作出不同的响应,这就是多态性的体现。这种方法可以在编译时不确定对象的具体类型,而在运行时根据对象的实际类型来动态地确定调用哪个函数,从而提高程序的灵活性和可扩展性。