21xrx.com
2024-12-22 23:10:38 Sunday
登录
文章检索 我的文章 写文章
如何在 C++ 子类构造函数中获取父类对象?
2023-06-30 17:56:24 深夜i     --     --
C++ 子类 构造函数 父类对象 获取

在 C++ 中,当一个类被继承时,子类将自动继承父类的所有成员和方法。然而,在某些情况下,我们需要在子类的构造函数中获取父类对象,以便对父类的成员进行初始化和调用方法。本文将介绍如何在 C++ 子类中获取父类对象的方法。

一、使用传统方法获取父类对象

使用传统的方法,我们可以在子类的构造函数中调用父类的构造函数,并将父类对象指针保存到子类的成员变量中,以便在构造函数中使用它。

以下是示例代码:


class Parent{

public:

  Parent(int x):val(x) cout<<"Parent constructor"<<endl;

  virtual void foo() cout<<"Parent foo"<<endl;

protected:

  int val;

};

class Child:public Parent{

public:

  Child(int x):Parent(x)

    cout<<"Child constructor"<<endl;

    this->parent = this;

  

  Parent& getParent(){ return *parent; }

private:

  Parent* parent;

};

int main(){

  Child c(10);

  c.getParent().foo(); // 调用父类方法

  return 0;

}

在上面的代码中,我们创建了一个 `Parent` 类和一个 `Child` 类,`Child` 类继承自 `Parent` 类。在 `Child` 类的构造函数中,我们通过调用父类构造函数和保存父类指针的方式获取了父类对象,并且在 `Child` 类中提供了一个 `getParent` 方法来返回父类对象的引用。最后,在主函数中,我们调用了 `getParent` 方法来调用父类对象的 `foo` 方法。

二、使用关键字 `base` 获取父类对象

在 C++11 之后,我们可以使用关键字 `base` 来获取父类对象,而不必显示地调用父类构造函数。

以下是示例代码:


class Parent{

public:

  Parent(int x):val(x) cout<<"Parent constructor"<<endl;

  virtual void foo() cout<<"Parent foo"<<endl;

protected:

  int val;

};

class Child:public Parent{

public:

  Child(int x):Parent(x), parent(this) // 通过关键字 'base' 获取父类对象

    cout<<"Child constructor"<<endl;

  

  Parent& getParent() return *parent;

private:

  Parent& parent;

};

int main(){

  Child c(10);

  c.getParent().foo(); // 调用父类方法

  return 0;

}

在上面的代码中,我们在 `Child` 类的构造函数中使用了关键字 `base` 来获取父类对象,而且在 `Child` 类中提供了一个 `getParent` 方法来返回父类对象的引用。最后,在主函数中,我们调用了 `getParent` 方法来调用父类对象的 `foo` 方法。

总结

在 C++ 中,我们可以使用传统的方式或者关键字 `base` 来获取父类对象,以便在子类的构造函数中进行初始化和调用父类的方法。但是需要注意的是,在获取父类对象时,不能在子类的构造函数之前使用父类对象的成员和方法。

  
  

评论区

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