zoukankan      html  css  js  c++  java
  • 构造函数

    访问控制符只作用于类,而非作用于对象,因此,同一个类的不同对象,可以互相访问非公有部分。

    构造函数

      --缺省构造函数

        即无参构造函数,但并非真正没有任何参数,为有参构造函数的每个参数提供缺省值,同样是无参构造函数的效果;

        编译器会给没有定义构造函数的类,提供缺省的构造函数。只要类中已定义了构造函数,编译器都不再提供缺省构造函数;

        对基本类型的成员变量,不做初始化;

        对类类型的成员变量和基类子对象,调用相应类型的缺省构造函数初始化;

        有时需自己定义缺省构造函数,即使它什么也不做,尤其是在使用数组或容器时(定义类数组时,必须调用无参构造函数);

        有时需为一个类提供缺省构造函数,仅仅因为它可能作为另一个类的子对象而被缺省构造;

        若子对象不宜缺省构造,则需要为父对象提供缺省构造函数,并在其中显示的以非缺省方式构造该子对象

    //父提供子对象的非缺省构造函数类型
    
    class c
    {public :
        c(int data)
        {
            m_data = data;
        }
    private :
        int m_data;
    };
    class d
    {
    public:
        D () :m_c(10){}
        c m_c;
    };

      --类型转换构造函数

        在目标类型中,可以接受单个原类型对象实参的构造函数,支持从原类型到目标类型的隐形类型转换

    class object
    {
           object (const object & origal)
                {
                        
                } 
    //object (基本类型 value)
           {
                成员变量 = value;
            } };

    //拷贝构造函数

    类名 (const 类名& other)
    {
       成员变量 = other.变量;
    }        

     

      --拷贝构造函数

        若定义了拷贝构造函数,编译器不再提供缺省构造函数,这时,所有与成员复制有关的操作,都必须在自定义拷贝构造函数中编写代码完成。

          在父类型中定义拷贝构造函数,若无显示定义子对象的拷贝构造函数,则调用子对象的缺省构造函数。想要调用子对象的拷贝构造函数,则需显示定义子对象拷贝构造函数。

        

    class A 
    {
    public:
        A (){cout << "A 的缺省构造" << endl;}
        A(const A & other)
        {
            cout << "A 的拷贝构造" << endl;
        }
    private :
        int m_a;
    
    };
    class B
    {
     public:
        B (){cout << "B 的缺省构造" << endl;};
        B (const B & other)//并没有对子对象A进行拷贝,若让A调用非缺省构造,则需显示定义
        {
            cout << "B 的拷贝构造" << endl;
        }
      
        A a;
    };
    
    int main()
    {
        B b1;//A 的缺省构造,B的缺省构造
        B b2 = b1;//A的缺省构造,B的拷贝构造;
        
        system("pause");
    }
    //构造函数
    
    #include "stdafx.h"
    #include<iostream>
    using namespace std;
    class Integer 
    {
    public :
        //缺省构造函数(无参构造函数)
        Integer ( ){
            m_data = 0;
        }
        Integer(int data = 0){ }//带缺省参数的构造函数,可用无参的形式调用
        //类型转换构造函数(单参构造函数)
        Integer ( int data )
        {
            m_data = data;
        }
        //缺省拷贝构造函数
        
        Integer (const Integer& that)
        {
            m_data = that.m_data;
        }
        void Set( int data )
        {
            m_data = data;
        }
        int get ( )
        {
            return m_data;
        }
    private:
        int m_data;
    
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        Integer s1;
        cout << s1.get() << endl;
        s1= 100;
        //等价于s1= Integer (100),将int 型转换为Integer 型
        cout << s1.get() << endl;
        Integer s2(s1);
        cout << s2.get() << endl;
        system("pause");
        
        return 0;
    }

      

  • 相关阅读:
    获取时间差
    列表添加空字符串
    python提示InsecureRequestWarning
    网络抓包工具
    活动目录相关的面试题(一)
    How to Install Zabbix 4 on CentOS 8 / RHEL 8 in 10 minutes!
    服务器在使用 yum 命令时出现 No match for argument: screen Error: Unable to find a match 错误
    RHEL8/CentOS8的基础防火墙配置-用例
    RHEL8和CentOS8怎么重启网络
    信息安全等级保护等级划分
  • 原文地址:https://www.cnblogs.com/day-up/p/5125575.html
Copyright © 2011-2022 走看看