17、对象的构造

如果没有赋初值,全局存储区的成员变量初始值系统默认为0,栈空间和堆空间上成员变量初始值系统默认为随机数。

从程序设计的角度,对象只是变量,

c++中可以定义与类名相同的特殊成员函数-构造函数。

构造函数没有任何返回类型的声明。

构造函数在对象定义时自动调用。

每个对象在使用之前都应该初始化,构造函数用于对象初始化。

构造函数可以根据需要定义参数,对象定义和对象声明不同:

对象定义:申请对象的空间并调用构造函数。

对象声明:告诉编译器存在这样一个对象。

执行程序:预处理器->编译器(生成可执行文件)->链接器

Test t1(1);  //调用 Test(int v)

Test t2=1;     //一样 调用  Test (int v)

int i=1;         //初始化

int i(100);    //初始化

i=1;             //赋值

手工调用构造函数:

Test ta[3]={  Test(), Test(1), Test(2)  };

Test t=Test(100);   // 手工调用初始化方式

小实例:开发一个数组类解决原生数组的安全性问题

    提供函数获取数组长度

    提供函数获取数组元素

    提供函数设置数组元素

#ifndef _INTARRAY_H_
#define _INTARRAY_H_
class IntArray
{
private:
int m_length;
int* m_pointer;
public:
IntArray(int len);
int length();
bool get(int index, int& value);
bool set(int index,int value);
void free();
};

#endif

#include "IntArray.h"
IntArray::IntArray(int len)
{
m_pointer=new int[len];
for(int i=0;i<len;i++)
{
m_pointer[i]=0;
}
}
int IntArray::length()
{
return m_length;
}
bool IntArray::get(int index, int& value) 
{
bool ret=(0<=index)&&(index<length());
if(ret)
{
value=m_pointer[index];
}
return ret;
    }
bool IntArray::set(int index,int value)
{
bool ret=(0<=index)&&(index<length());
if(ret)
{
m_pointer[index]=value;
}
return ret;
}
void IntArray::free()
{
delete[] m_pointer;

}

#include <iostream>
#include "IntArray.h"
using namespace std;
int main()
{
IntArray a(5);
for(int i=0;i<a.length();i++)
{
a.set(i,i+1);
}
for(int i=0;i<a.length();i++)
{
int value=0;
if(a.get(i,value))
{
cout<<value<<endl;
}
}
a.free();
system("pause");
return 0;

}


猜你喜欢

转载自blog.csdn.net/ws857707645/article/details/80195271