构造和析构!

一般而言,所有的对象都需要一个确定的初始状态!

C++中的类可以定义与类名相同的特殊成员函数,这种类名相同的成员函数叫做构造函数,构造函数在定义时可以有参数,但是没有任何返回类型的声明(和返回void是两个概念)

构造函数的调用:一般情况下C++编译器自动调用构造函数

#include <iostream>

using namespace std;

class Test
{
private:
    int i,j,k;
public:
    Test(int v)
    {
        i = j = k = v;
    }
    void print()
    {
        printf("i = %d,j = %d,k = %d\n",i,j,k);
    }
};
int main()
{
    Test t1(4);//自动调用构造函数
    Test t2 = 5;//自动调用构造函数
    Test t3 = Test(6);//主动调用构造函数

    t1.print();
    t2.print();
    t3.print();

    Test tA[3] = {Test(1),Test(2),Test(3)};//主动调用构造函数
    for(int i=0;i<3;i++)
    {
        tA[i].print();
    }
    return 0;
}
View Code

两个特殊的构造函数:拷贝构造函数和默认构造函数

无参构造函数:当类中没有定义任何一个构造函数,C++编译器会为我们提供无参构造函数和拷贝构造函数。默认构造函数为空什么都不做

拷贝构造函数:当类中定义了任意的非拷贝构造函数是,C++编译器就不会提供无参构造函数了,会为我们提供拷贝构造函数。默认拷贝构造函数会对成员变量一 一复制。

#include <iostream>

using namespace std;

class Test
{
private:

public:
    Test(const Test& v)//拷贝构造函数
    {
        printf("Test(const Test& v)\n");
    }
    Test()//默认构造函数
    {
        printf("Test()\n");
    }
};
int main()
{
    Test t1;
    Test t2 = t1;
    return 0;
}
View Code

 C++中提供了初始化列表对成员变量进行初始化

语法规则:

Constructot::Constructot():m1(v1),m2(v1,v2),m3(v3)
{
    //some other assignment operation
}

注意:1.成员变量的初始化顺序与声明的顺序相关,与在初始化列表中的顺序无关 2初始化列表先于构造函数的函数体执行

(初始化与赋值的不同:初始化是用已存在的对象或值对正在创建的对象进行初值设置,赋值是用已存在的对象或值对已经存在的对象进行值设置。)。

#include <iostream>

using namespace std;

class M
{
private:
    int mI;
public:
    M(int i)
    {
        printf("M(int i),i = %d\n",i);
        mI = i;
    }
    int getI()
    {
        return mI;
    }
};
class Test
{
private:
    const int c;
    M m1;
    M m2;
public:
    Test():c(1),m1(2),m2(3)
    {
        printf("Test()\n");
    }
    void print()
    {
        printf("c = %d,m1.mI = %d,m2.mI = %d\n",c,m1.getI(),m2.getI());
    }
};
void run()
{
    Test t1;
    t1.print();
}
int main()
{
    run();
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/Rainingday/p/7569522.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值