Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251509
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-24 07:45
个人简介

生活就像海洋,只有意志坚强的人,才能到达彼岸。

文章存档

2013年(52)

分类: C/C++

2013-10-07 09:55:31

1、对象的初始化
一般而言,所有的对象都需要一个确定的初始化状态,而在C++中,在定义类对象的时候不能对成员变量进行初始化,以此则推导出这样一个解决办法:首相为每个类都提供一个public的initialize函数,对象创建后立即调用initialize函数进行初始化。
class Test
{
pricate:
    int i;
    public:
void initialize()
{
    i = 0;
}
int getI()
{
    return i;
}
};
int main()
{
    Test t1;
    Test t2;
    Test t2;
    t1.initialize();
    t2.initialize();
    t3.initizlize();
}
然而initialize只是一个普通的函数,必须显示的调用,一旦由于失误的原因,队形没有初始化,那么结果将是不确定的,没有初始化的对象,其内部程艳变量的值时不定的。这才引出了C++中的构造函数
2、C++中的构造函数
C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数,构造函数在定义时可以有参数,但是没有任何返回类型的声明。
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);
}
}
一般情况下C++编译器会自动调用构造函数,在一些情况下则需要手工调用构造函数。
#include
#include
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(3),Test(4),Test(5)};//主动调用构造函数
    for(int i = 0; i < 3; i++)
    {
        tA[i].print();
    }
    printf("Press any key to continue...\n");
    getchar();
    return 0;
}
;类的成员函数和普通函数一样可以进行重载,并遵守相同的重载规则。
两个特殊的构造函数
#include
#include
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...\n");
    getchar();
    return 0;
}
无参构造函数:
当类中没有定义构造函数时,编译器默认提供一个无参构造函数 ,并且其函数体为空。
拷贝构造函数:
当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制。
注意:
1. 当类中没有定义任何一个构造函数,C++编译器会为提供无参构造函数和拷贝构造函数
2. 当类中定义了任意的非拷贝构造函数时,C++编译器不会为提供无参构造函数

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. class Test
  3. {
  4. private:
  5.     int i;
  6.     int j;
  7.     int k;
  8. public:
  9.     void print()
  10.     {
  11.         printf("i = %d, j = %d, k = %d\n", i, j, k);
  12.     }
  13. };
  14. int main()
  15. {
  16.     Test t1;
  17.     Test t2 = t1;
  18.     t1.print();
  19.     t2.print();
  20.     printf("Press any key to continue...");
  21.     getchar();
  22.     return 0;
  23. }
  24. 3、创建数组类
  25. #ifndef _ARRAY_H_
  26. #define _ARRAY_H_
  27. class Array
  28. {
  29. private:
  30.     int mLength;
  31.     int* mSpace;
  32. public:
  33.     Array(int length);
  34.     Array(const Array& obj);
  35.     int length();
  36.     void setData(int index, int value);
  37.     int getData(int index);
  38.     void destory();
  39. };
  40. #endif



点击(此处)折叠或打开

  1. #include "Array.h"
  2. Array::Array(int length)
  3. {
  4.     if( length < 0 )
  5.     {
  6.     mLength = 0;
  7.     }
  8.     mLength = length;
  9.     mSpace = new int[mLength];
  10. }
  11. Array::Array(const Array& obj)
  12. {
  13.     mLength = obj.mLength;
  14.     mSpace = new int[mLength];
  15.     for(int i = 0 ; i < mLength; i++)
  16.     {
  17.         mSpace[i] = obj.mSpace[i];
  18.     }
  19. }
  20. int Array::length()
  21. {
  22.     return mLength;
  23. }
  24. void Array::setData(int index, int value)
  25. {
  26.     mSpace[index] = value;
  27. }
  28. int Array::getData(int index)
  29. {
  30.     return mSpace[index];
  31. }
  32. void Array::destory()
  33. {
  34.     mLength = -1;
  35.     delete[] mSpace;
  36. }



点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "Array.h"
  4. int main()
  5. {
  6.     Array a1(10);
  7.     for(int i = 0; i < 10; i++)
  8.     {
  9.         a1.setData(i,i);
  10.     }
  11.     for(int i = 0; i < 10; i++)
  12.     {
  13.         printf("Element: %d\n",a1.getData(i));
  14.     }
  15.     Array a2 = a1;
  16.     for(int i = 0; i < 10; i++)
  17.     {
  18.         printf("Element: %d\n",a2.getData(i));
  19.     }
  20.     a1.destory();
  21.     a2.destory();
  22.     printf("Press any key to continue...\n");
  23.     getchar();
  24.     return 0;
  25. }



阅读(2739) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~