21xrx.com
2024-12-23 00:31:33 Monday
登录
文章检索 我的文章 写文章
C++中子类和父类同名函数的处理方式
2023-06-28 13:06:36 深夜i     --     --
C++ 子类 父类 同名函数 处理方式

在C++中,继承是一种常见的编程技术,它可以让我们在一个类中重复使用已经写好的代码,从而减少代码的冗余和提高开发效率。但是,在使用继承时,往往会遇到子类和父类中定义了同名函数的情况,这时候就需要采用下面的处理方式。

1. 普通成员函数的同名处理方式:

当子类和父类中定义了同名的普通成员函数时,在子类中想要使用父类中的同名函数,必须使用“作用域限定符”来显式地说明使用的是父类的同名函数,具体语法如下:


class B{

public:

  void foo() cout<<"B::foo"<<endl;

};

class D : public B {

public:

  void foo(){

    B::foo(); // 显式地调用父类同名函数

    cout<<"D::foo"<<endl;

  }

};

在子类D中,子类中的foo函数和父类中的foo函数同名,但是在函数体中通过B::foo()来显式的调用父类中的同名函数,从而保证了程序正常运行。

2. 构造函数和析构函数的同名处理方式:

对于构造函数和析构函数而言,它们在定义时不允许带有返回值类型,在子类和父类中定义同名的构造函数和析构函数时,需要使用“调用父类构造函数”的方式来保证父类和子类的构造函数能够正确的调用。具体语法如下:


class B{

public:

  B() cout<<"B construnt"<<endl;

  ~B() cout<<"B destruct"<<endl;

};

class D : public B {

public:

  D():B() cout<<"D construnt"<<endl; //调用父类构造函数

  ~D() cout<<"D destruct"<<endl;    //调用父类析构函数

};

在子类D中,使用D()显式的调用了父类B中的构造函数,确保了在子类中调用父类构造函数的过程中,可以正确的执行父类中的代码。析构函数同理。

总之,子类和父类中定义同名函数时,需要通过“作用域限定符”或者“调用父类构造函数/析构函数”的方式来避免同名函数带来的命名冲突,保证程序正常的继承关系和运行结果。

  
  
下一篇: C++输出星号

评论区

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