构造函数 二(3)

构造函数:与类名同、无返回可有参数
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;
}
类成员函数和普通函数一样可进行重载,并遵守相同重载规则
类中没定义任何一构造函数,编译器默认提供无参构造函数(函数体为空)和拷贝构造函数(简单的进行成员变量的复制)
类中仅定义非拷贝构造函数,编译器不再提供无参构造函数,但提供拷贝构造函数
类中仅定义拷贝构造函数,编译器不再提供无参构造函数

Test(const Test& obj) {}//拷贝构造函数
Test t1; Test t2(t1);
例:
class Test

private:
    int i;
    int j;
    int k;
public:
    void print()
    {
        printf("i = %d, j = %d, k = %d\n", i, j, k);
    }
};


int main()
{
    Test t1,t2;
    t1.print();
    t2.print(); 
    Test t3(t1); //拷贝构造函数被调用
    t3.print(); 
    return 0;
}


------/例:数组类的创建Array.h
#ifndef _ARRAY_H_
#define _ARRAY_H_
class Array
{
private:
    int mLength;
    int* mSpace;


public:
    Array(int length);
    Array(const Array& obj);
    int length();
    void setData(int index, int value);
    int getData(int index);
    void destory();
};
#endif
------/ Array.cpp
#include "Array.h"
Array::Array(int length)
{
    if( length < 0 )
    {
        length = 0;
    }
    mLength = length;
    mSpace = new int[mLength];
}
//不能使用默认拷贝构造函数,否则使a1.mSpace与a2.mSpace内容同,指向同一内存
Array::Array(const Array& obj)
{
    mLength = obj.mLength;
    mSpace = new int[mLength];
    for(int i=0; i<mLength; i++)
    {
        mSpace[i] = obj.mSpace[i];
    }
}
int Array::length()
{
    return mLength;
}
void Array::setData(int index, int value)
{
    mSpace[index] = value;
}
int Array::getData(int index)
{
    return mSpace[index];
}
void Array::destory()
{
    mLength = -1;
    delete[] mSpace;
}
------/ main.cpp
#include <stdio.h>
#include "Array.h"
int main()
{
    Array a1(10);
    for(int i=0; i<a1.length(); i++)
    {
        a1.setData(i, i);
    }
    for(int i=0; i<a1.length(); i++)
    {
        printf("Element %d: %d\n", i, a1.getData(i));
    }
    Array a2(a1);
    for(int i=0; i<a2.length(); i++)
    {
        printf("Element %d: %d\n", i, a2.getData(i));
    }
    a1.destory();
    a2.destory();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值