21xrx.com
2025-03-27 06:07:25 Thursday
文章检索 我的文章 写文章
如何在C++子类中调用父类方法?
2023-07-05 15:38:01 深夜i     --     --
C++ 子类 父类方法 继承 调用

在C++中,可以使用继承来扩展现有的类,并且可以在子类中重写父类的方法。但是,在某些情况下,子类需要在自己的方法中调用父类的方法。那么,如何在C++子类中调用父类方法呢?

有两种方式可以达到这个目的:

1.使用类名显式调用

可以使用类名和作用域解析符(::)来显式调用父类的方法。例如,假设有一个名为Animal的父类,其中定义了一个名为eat()的方法。子类Dog继承了Animal类,可以使用以下方法在子类中调用eat()方法:

class Animal {
public:
  virtual void eat()
   cout << "Animal eats." << endl;
 
};
class Dog : public Animal {
public:
  void eat() {
   Animal::eat();
   cout << "Dog eats." << endl;
  }
};
int main() {
  Dog d;
  d.eat();
  return 0;
}

上面的例子中,Dog类重写了父类的eat()方法,并且在其自己的eat()方法中通过Animal::eat()显式调用了父类的eat()方法。这样在执行Dog的eat()方法时,就会首先调用父类的eat()方法,然后再输出Dog自己的消息。

2.使用指向父类的指针

另一种方式是在子类中定义一个指向父类的指针,并使用该指针调用父类的方法。例如:

class Animal {
public:
  virtual void eat()
   cout << "Animal eats." << endl;
 
};
class Dog : public Animal {
public:
  void eat() {
   Animal *a = this;
   a->Animal::eat();
   cout << "Dog eats." << endl;
  }
};
int main() {
  Dog d;
  d.eat();
  return 0;
}

在上面的例子中,Dog类也重写了父类的eat()方法。子类eat()方法中定义了一个指向Animal的指针,并使用该指针调用了父类的eat()方法。这样也可以在执行Dog的eat()方法时,首先调用父类的eat()方法,然后再执行子类的eat()方法。

总结

无论是使用类名显式调用父类方法,还是使用指向父类的指针,都可以在C++子类中调用父类的方法。如果需要在子类中扩展父类的功能而不是重写父类的方法,则应该使用前者。如果需要在子类中重写父类的方法并在其中调用父类的方法,则应该使用后者。

  
  

评论区