zoukankan      html  css  js  c++  java
  • [C++] 构造函数的用法

    因为C++的三大特性之一是数据隐藏,成员变量都是私有的,所以类不能像结构那样直接初始化,而需要构造函数,将需要初始化的数据在对象中实现初始化。构造函数与其他函数不同,没有返回值,也不能被对象调用(只是用于对象的初始化)。实质是类的隐式初始化,在对象初始化的时候,自动被调用。

    构造函数可以分为一般的构造函数(分有参和无参)和用于对象复制的复制构造函数(又称拷贝构造函数)。

    使用new来创建对象的时候,对象实际上没有名称,得到一个指向对象地址的指针,可以通过该指针管理对象。

    #include <iostream>  
    using namespace std;  
      
    class Test  
    {  
    public:  
        Test()                     //无参构造函数,也叫默认构造函数,如果形参列表不为空且每个形参都有默认值,则也称为默认构造函数  
        {   
          cout<<"struct1 of Test!"<<endl;
        }  
        
        Test(const Test &another)  //拷贝构造函数  
        { 
            m_a=another.m_a;
            cout<<"struct2 of Test!"<<endl;
        }  
        
        Test(int a) :m_a(a)       //有参构造函数,非默认构造函数,如果参数列表中所有的形参都有默认值,则是默认构造函数  
        {  
            m_a = a;
            cout<<"struct3 of Test!"<<endl;
        }
      
        void print()  
        {  
            cout << " m_a = " << m_a << endl;  
        }  
    
    private:  
        int m_a;      
    };   

    void main()  
    {  
        Test t1(10);         //括号法  //c++编译器自动调用这个类的有参构造函数  
        t1.print();  
        Test t2 = 20;        //等号法  //c++编译器自动调用这个类的有参构造函数  
        t2.print();  
        Test t3=Test(30);    //手工法 //程序员手工的调用构造函数 进行对象初始化
        t3.print();
    }  

     当且仅当没有任何构造函数时,编译器才会提供默认构造函数,一旦用户定义了非默认构造函数而不提供默认的构造函数,试图使用默认构造形式初始化对象时,会导致错误(编译器不再提供默认构造函数)。

    C++11中的列表初始化

    C++11标准支持的列表初始化,需要提供与某个构造函数的参数列表匹配的内容,并将其括起来即可。

    Test test = {"test construct", 0, 0.0}; //匹配Test::Test(const tring &str, int a, double b)
    Test test = {"test const"}; //匹配Test::Test(const string &str, int a, double b)
    Tets test = {};    //匹配Test::test()

    const成员函数

    类方法结尾加上const修饰符后成为const成员函数,在C++的规则中,当方法不修改调用对象时,最好将其声明为const型的。试图用一个const型的对象调用一个非const型的成员函数会被编译器报告错误,因为编译器不能保证该方法不会改变调用对象。

    this指针

  • 相关阅读:
    参考SQLHelper编写的OracleHelper
    微软原版SQLHelper类
    AppFabric 版本区分
    ASP.NET (HttpModule,HttpHandler)
    ASP.NET内部原理(HttpHandler和HttpModule)
    IIS 7.0, ASP.NET, pipelines, modules, handlers, and preconditions
    理解I/O Completion Port
    asp.net mvc跨域filter
    c#生成MD5字符串
    生成格式化的json
  • 原文地址:https://www.cnblogs.com/ingy0923/p/8647800.html
Copyright © 2011-2022 走看看