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)

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

    参考百度知道回答

  • 相关阅读:
    p2394 精度题
    线性筛素数
    poj3468 线段树的懒惰标记
    逆元
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    判断素数遇到的问题
    Mergeable Stack(链表实现栈)
    组合数
    poj2594 机器人寻找宝藏(最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14049199.html
Copyright © 2011-2022 走看看