zoukankan      html  css  js  c++  java
  • 初始化成员列表 ——— 类的const成员和引用成员的初始化

    class A

    {

    public:

         A(){};

      const int num;

      CString& s;

    }

    A::A()

    {

      cout<<A con<<endl;

    }

    void main()

    {

      A a;  

    }

    这是不过的,因为const成员变量需要在构造函数调用进入函数体之前就要被初始化,所以

    C++有一种语法叫做 成员初始化列表。

    构造函数改为

    A::A():num(5):s(myString)

    {

      cout<<A con<<endl;

    }

    这样const int num被初始化为5,s被初始化为myString。

    只有构造函数有这个语法,并且const和引用必须这样初始化。

    下面这种情况是一个类的成员变量是一个类对象。

    #include "stdafx.h"
    
    class ClassA
    {
    public:
    	ClassA(int a)
    	{
    		m_a=a;
    		printf("ClassA con");
    	}
    	int m_a;
    };
    
    
    class ClassB
    {
    public:
    	ClassB();
    	ClassA a;
    };
    
    ClassB::ClassB():a(2)
    {
    	printf("ClassB con");
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	ClassB* b=new ClassB;
    	return 0;
    }
    

      因为ClassA已经提供了一个有参数的构造函数,编译器不再提供默认的无参构造函数。所以ClassB如果不初始化a对象的话,是编译不过去的

    所以在ClassB的构造函数初始化了a对象。

  • 相关阅读:
    TypeError: 'ExcelData' object is not iterable
    输出重定向
    联想Thinkpad T450 屏幕更换记录
    C-sysytem命令的使用
    CMD命令大全
    Ubuntu16.04 添加 Docker用户组
    Docker学习
    Linux系统卡死后紧急处理
    Django之ModelForm详解
    Django的ORM实现数据库事务操作
  • 原文地址:https://www.cnblogs.com/Browneyes/p/6089358.html
Copyright © 2011-2022 走看看