[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指针

原文链接: https://www.cnblogs.com/ingy0923/p/8647800.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/271098

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午9:41
下一篇 2023年2月14日 下午9:42

相关推荐