zoukankan      html  css  js  c++  java
  • 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

      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;

      }无锡看妇科哪家好 http://www.wxbhnkyy39.com/

      int getBaseElem(){

      return Base::getElem();

      }

      private:

      string name;

      int add;

      };

      int main()

      {

      Derive d("child class object", 12, 15);

      cout <<"Derive name="<< d.getName() << " Derive elem=" << d.getElem();

      cout<

      cout<<"Base elem="<

      return 0;

      }

      下面是运行结果:

      $g++ -std=c++11 -o main *.cpp

      $main

      Derive name=child class object

      Derive elem=27

      Base elem=15

  • 相关阅读:
    利用 socket 发送 get/post 请求
    图解SQL的Join
    6大主流开源SQL引擎总结,遥遥领先的是谁?
    JavaScript工具库之Lodash
    Node.js面试题之2017
    实用的 JavaScript 调试小技巧
    5 个技巧避免不必要的浏览器兼容性问题
    在 Node.js 中引入模块:你所需要知道的一切都在这里
    一行神奇的 javascript 代码
    webGL动画
  • 原文地址:https://www.cnblogs.com/djw12333/p/10918001.html
Copyright © 2011-2022 走看看