zoukankan      html  css  js  c++  java
  • 构造函数初始化列表 组合类构造函数

    一、类的构造函数初始化列表

    在构造Point类的对象时传入实参初始化 xx和yy,然后用xx的值初始化Point类的数据成员X,用yy的值初始化数据成员Y

    #include <iostream>
    
    class point
    {
    public:
        point(int xx, int yy);
    private:
        int x;
        int y;
    };
    
    point::point(int xx, int yy) :x(xx), y(yy)
    {
        //用xx和yy初始化成员变量x和y
        //相当于在构造函数内部写了x = xx;和 y = yy;
        std::cout << "x = " << x << std::endl;
        std::cout << "y = " << y << std::endl;
    }
    
    int main()
    {
        point p(6, 9);
        return 0;
    }
    

    组合类构造函数定义:(不能在声明中这样写,因为这是在定义时初始化,声明的时候不需要初始化)

    类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表),...
    {
      类的初始化
    }

    参考c++基础语法(构造函数初始化列表)

    二、子类向父类传递参数

    #include <iostream>
    using namespace std;
    
    class ParentClass
    {
    public:
        //ParentClass()
        //{
        //    cout << "Parent: non-parameter constructor\n";
        //}
        ParentClass(int a):m_a(a)
        {
            cout << "Parent: Constructor with parameters\ta = " << a << endl;
        }
    
        //other func  ...
    protected:
        int m_a;
    };
    
    
    class ChildClass : public ParentClass
    {
    public:
        //ChildClass(int b):m_b(b)
        //{
        //    cout << "Child: non-parameter constructor\n";
        //}
        ChildClass(int b) :ParentClass(b), m_b(b)
        {
            cout << "Child: Constructor with parameters\tb = " << b << endl;
        }
    protected:
        int m_b;
    
        //...
    };
    
    
    int main()
    {
        ChildClass cc(3);
    
        return 0;
    }
    

    如果基类没有无参构造函数,不使用初始化列表向基类传递参数进行构造父类是会报错的。

    三、c++子类在继承构造函数有参数的父类时为什么要往父类传参?

    ChildClass::ChildClass(int a):ParentClass(a)

    父类构造的时候需要参数,子类继承的是父类,没有参数父类的构造函数无法执行。传过去的参数用于父类的构造函数执行(通俗的说,一般用于初始化父类的成员变量等)。参数是传给父类的构造函数的。换而言之,父类的成员变量的初始化时保存了这个变量;或者用于父类实例化时需要一次性使用的参数(比如,对话框尺寸、指定类中的枚举类型等)。

    参考百度知道回答

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14049199.html
Copyright © 2011-2022 走看看