如果没有赋初值,全局存储区的成员变量初始值系统默认为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;
}