当前位置:首页 C++ > 正文

c++父类指针指向子类对象

作者:野牛程序员:2023-08-07 10:15:00 C++阅读 3456

在C++中,父类指针可以指向子类对象。这是因为子类是从父类继承而来的,子类对象包含了父类对象的部分或全部成员。通过将父类指针指向子类对象,可以实现对子类对象的访问和操作。

要使用父类指针指向子类对象,需要满足以下两个条件:

  1. 子类必须是从父类继承而来的。

  2. 父类指针必须声明为指向父类的指针,而不是子类的指针。

下面是一个简单的示例,演示如何使用父类指针指向子类对象:

#include <iostream>

class Animal {
public:
    void makeSound() {
        std::cout << "Animal makes a sound." << std::endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() {
        std::cout << "Dog barks: Woof! Woof!" << std::endl;
    }
};

int main() {
    Animal* animalPtr; // 声明一个指向Animal的指针

    Animal animal;
    Dog dog;

    // 父类指针指向子类对象
    animalPtr = &animal; // 指向Animal对象
    animalPtr->makeSound(); // 调用的是Animal类的makeSound方法

    animalPtr = &dog; // 指向Dog对象
    animalPtr->makeSound(); // 调用的是Dog类的makeSound方法

    return 0;
}

在上述例子中,定义了一个基类Animal和一个子类DogDog类继承自Animal类。声明了一个指向Animal的指针animalPtr,然后将其分别指向Animal对象和Dog对象,并通过这个指针调用了相应的方法。由于makeSound()是非虚函数,调用的是指针类型对应的类的方法。

需要注意的是,为了实现多态,即让父类指针指向子类对象时调用子类的方法,需要将父类的函数声明为虚函数。这样,通过父类指针访问的方法会在运行时根据对象的实际类型来确定调用的是哪个类的方法。如果将makeSound()函数声明为虚函数,则在上述例子中,通过animalPtr指向Dog对象时会调用Dog类的makeSound()方法。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击