21xrx.com
2024-09-20 06:12:43 Friday
登录
文章检索 我的文章 写文章
C++中如何使用父类指针调用同名非虚函数并执行子类对象函数?
2023-07-04 18:34:59 深夜i     --     --
C++ 父类指针 同名非虚函数 子类对象函数 调用

在C++中,如果存在一个父类指针指向一个子类对象,我们可以使用该指针调用子类对象的函数,这是因为子类继承了父类的所有成员函数。但是,当父类和子类均具有同名的非虚函数时,使用父类指针调用函数时只能调用到父类的同名函数,无法调用到子类的同名函数。那么如何使用父类指针调用同名非虚函数并执行子类对象函数呢?下面是具体的解决办法。

首先,我们需要将父类的同名函数声明为虚函数,这使得子类可以重写该函数。例如,我们将父类的同名函数声明为虚函数:


class Parent {

public:

  virtual void foo()

    cout << "Parent's foo" << endl;

  

};

接下来,我们创建一个子类,并重写父类的同名函数,如下所示:


class Child : public Parent {

public:

  void foo()

    cout << "Child's foo" << endl;

  

};

现在,我们可以创建一个父类指针,并将其指向一个子类对象:


Parent* ptr = new Child;

如果我们要使用父类指针调用同名非虚函数并执行子类对象函数,需要使用强制类型转换将父类指针转换为子类指针,如下所示:


Child* childPtr = static_cast<Child*>(ptr);

childPtr->foo();

这将调用子类的同名函数,并输出"Child's foo"。注意,强制类型转换只适用于父类指针确实指向了一个子类对象,否则会导致未定义的行为。因此,在使用强制类型转换时应谨慎,并确保我们了解代码逻辑。

综上所述,通过将父类的同名函数声明为虚函数,我们可以使用父类指针调用同名非虚函数并执行子类对象函数。然而,这种方法需要我们了解父类与子类函数的继承关系,并采取一定的安全措施来避免程序出错。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复