头文件:
重载三个构造函数,根据实例化对象传入的参数自动调用。
#ifndef RELOAD_H_INCLUDED
#define RELOAD_H_INCLUDED
#include <string.h>
//构造函数的重载
class Reload
{
private:
char *myName;
int myAge;
public:
//重载三个构造函数
Reload(int n = 20)
{
myName = new char[n];
}
Reload(char *name)
{
myName = new char[strlen(name) + 1];
strcpy(myName,name);
}
Reload(char *name,int age)
{
myName = new char[strlen(name) + 1];
strcpy(myName,name);
myAge = age;
}
~Reload(void)
{
delete[] myName;
}
//设置信息
void setName(char *name){strcpy(myName,name);}
void setAge(int n){myAge = n;}
char *getName(void){return myName;}
int getAge(void){return myAge;}
};
#endif // RELOAD_H_INCLUDED
源文件:
#include <iostream>
using namespace std;
#include <iomanip>
#include "reload.h"
int main()
{
//调用第一个构造函数
Reload andrew1;
//调用第二个构造函数
Reload andrew2("andrew is 2");
//对象数组的初始化,当调用构造函数的参数多余1个时,需要显式调用构造函数,此处调用第三个
Reload andrew3[3] = {Reload("tom",1),Reload("jerry",2),Reload("peter",3)};
cout<<"\tmy friends\n";
for(int i = 0;i<3;i++)
{
cout<<setw(10)<<andrew3[i].getName();
cout<<setw(5)<<andrew3[i].getAge()<<endl;
}
//对象1
andrew1.setName("andrew is 1");
andrew1.setAge(22);
//对象2
andrew2.setAge(66);
cout <<"andrew1:\t"<<andrew1.getName()<<"\t"<<andrew1.getAge()<< endl;
cout <<"andrew2:\t"<<andrew2.getName()<<"\t"<<andrew2.getAge()<< endl;
return 0;
}
运行结果:
注意:
1、函数重载时根据函数参数的个数或者类型来进行选择使用哪一个;但是不能根据函数的返回值来构建重载函数。
2、对象数组的初始化时,如果没有缺省构造函数,那么必须对数组中每个对象指定初始化值。
3、对象数组中每个对象的访问和其他类型的数组一样,采用下标的方式。