C++中派生类使用基类成员的问题

在C++中,派生类在定义构造函数时,会调用基类构造函数首先完成基类部分的构造:

class Derive : public Base
{
  public:
    Derive(string nam, int ad, int elem):Base(elem) {
     
    //  等价: this->name = nam;
    //         this->add = ad;
       name = nam;
       add = ad;
    }  
...
}

若若派生类定义了一个基类已有的数据成员,则会覆盖掉基类。在这个构造过程中,之类自身的成员构造可以使用this指针,

this->name = name;

也可以直接使用派生类自己已经定义的变量名进行赋值操作,如:

name = name1;

派生类只能直接访问基类中public/protected的成员,使用【基类类名::member】的形式:

class Derive: public Base{
       int new_id = Base::id;// id 在Base中public或protected
       string new_name= Base::getName();  //getName是Base的非private成员函数
...........
};

 

最后,一起看下完整代码:

#include <iostream>
using namespace std;
 
struct Base 
{
  public:
  Base(int a) {
    this->elem = a;  //   等价: elem = a;
  }
 
  int getElem() {
    return elem;
  }
 
  private:
    int elem;
};
 
class Derive : public Base
{
  public:
    Derive(string nam, int ad, int elem):Base(elem) {
     
    //  等价: this->name = nam;
    //         this->add = ad;
       name = nam;
       add = ad;
    }   
 
    int getElem() {
      return add + Base::getElem();
    }   
 
    string getName() {
      return name;
    }   
    int getBaseElem(){
        return Base::getElem();
    }
 
  private:
    string name;
    int add;
};
 
int main()
{
  Derive d("child class object", 12, 15);
 
  cout <<"Derive name="<< d.getName() << "\nDerive elem=" << d.getElem();
  cout<<endl;                                                   
  cout<<"Base elem="<<d.getBaseElem();
  return 0;
}

下面是运行结果:

$g++ -std=c++11 -o main *.cpp
$main
Derive name=child class object
Derive elem=27
Base elem=15

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值