21xrx.com
2024-12-22 22:06:35 Sunday
登录
文章检索 我的文章 写文章
如何在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++子类中调用父类的方法。如果需要在子类中扩展父类的功能而不是重写父类的方法,则应该使用前者。如果需要在子类中重写父类的方法并在其中调用父类的方法,则应该使用后者。

  
  

评论区

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