首页 > 编程语言 > 详细

C++构造与析构-10

时间:2017-09-25 00:30:01      阅读:301      评论:0      收藏:0      [点我收藏+]

一。对象的初始化

  1.一般所有的对象都需要一个确定的初始状态

  2.解决方案

    a。为每个类偶读提供一个public的initialize函数

    b。对象创建后立即调用initialize函数进行初始化

#include<stdio.h>

class Test
{
    private:
       int i;
    public:
       void initialize()
       {    
            i = 0;    
        }    
        int get1()
        {
            return i;
        }
};

int main()
{
    Test t1;
    Test t2;
    Test t3;
    
    t1.initialize();
    t2.initialize();
    t3.initialize();
    
    printf("ti.i = %d\n",t1.get1());
    printf("ti.i = %d\n",t1.get1());
    printf("ti.i = %d\n",t1.get1());
    
    printf("Press any key to continue");
    getchar();
    return 0;    
}

  3.initialize只是一个普通的函数,必须显示的调用

  4.一旦由于失误的原因,对象没有初始化,那么结果将是不确定的

    没有初始化的对象,其内部成员变量的值是不变的。

二。 C++中的构造函数

  1. C++中的类可以定义与类名相同的特殊成员函数。

  2.这种与类名相同的成员函数叫做构造函数

  3.构造函数在定义时可以有参数,但是没有任何返回类型的声明 

  4.构造函数的调用

    a。一般情况下C++编译器会自动调用构造函数

    b。一些情况下需要手工调用的函数

#include<stdio.h>

class Test
{
    private:
       int i;
       int j;
       int 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();
    }
    
    printf("Press any key to continue");
    getchar();
    return 0;    
}

  5.两个特殊的构造函数

#include<stdio.h>
/*
  注意:
   1.当类中没有定义任何构造函数,C++编译器会提供一个无参构造函数和拷贝构造函数
   2.当类中定义了任意的非拷贝构造函数时,C++编译器不会为我们提供无参构造函数
*/ class Test { private: int i; int j; int k; public: Test(const Test& v) { printf("Test(const Test& v)\n"); } Test() { printf("Test()\n"); } }; int main() { Test t1; Test t2 = t1; printf("Press any key to continue"); getchar(); return 0; }

  a.无参构造函数

    当类中没有定义构造函数时,编译器默认会提供一个无参构造函数,并且其函数体为空

  b.拷贝构造函数

    当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制

三。数组类

  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.c

#include"array.h"

Array::Array(int length) //数组创建 
{
    if(length < 0)
    {
        length = 0;
    }
    mLength = length;    
    mSpace = new int[mLength];
}
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.c

#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("element1 %d: %d\n",i,a2.getData(i));
    }
    
    a1.destory();
    a2.destory();
    
    printf("Press any key to continue");
    getchar();
    return 0;    
}

  输出结果

  技术分享

C++构造与析构-10

原文:http://www.cnblogs.com/lvxiaoning/p/7589310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!