C++程序解释

来源:百度知道 编辑:UC知道 时间:2024/09/25 07:06:29
#include<iostream.h>
#include<string.h>
class Sample{
private:
char *name; //这里name如果定义成数组(name[]) 有什么区别
int age;
public:
Sample(char *sourse,int num);
~Sample();
void print(){cout<<"Your name:"<<name<<"and age:"<<age;}
};
Sample::Sample(char *source, int num)
{
int size=strlen(source)+1 //这下面2句不太懂 能详细解释下可以吗 谢谢
name=new char[size];
strcpy(name,source);
}
Sample::~Sample() //析构函数的作用也解释一下
{
delete name;
}
int main()
{
char my_name[20];int my_age;
cout<<"Enter your name:";
cin.getline(my_name,20); //这里为什么要用getline?
cout<<"Enter your age:";
cin>>my_age;
Sample obj(my_name,my_age);
obj.print();
return 0;
}

1, 一个是动态数组一个是静态数组,静态数组定义是要给出大小,动态的要在程序运行时动态的分配内存,所以后面的name=new char[size];就是这个意思。
2,strlen(source)返回source的字符个数,由于申请的是数组内存要留一个装结束符的位子,所以+1;
3,析构函数的作用是在撤销对象占用的内存之前完成一些清理工作,让出空间。
4,你可以试验一下,用cin时输入有空格的话如:How are you?
再输出结果是How,用getline就不存在这个问题。

//这里name如果定义成数组(name[]) 有什么区别
这里根本都可以用,一个是动态分配内存。
//这下面2句不太懂 能详细解释下可以吗
动态分配size大小的char类型内存。
利用 strcpy把参数source的值赋给name。
//析构函数的作用也解释一下
析构函数主要delete动态分配的内存,name是new出来的,所以得在析构的时候delete掉。
//这里为什么要用getline?
getline可以空格的一行字符,默认以回车结束。

这里定义了一个char *name 是为了下面的name=new char[size];
基本上来说用name[]是没有区别的,只是下面不能用new来分配内存。
int size=strlen(source)+1
name=new char[size];
这两句是先计算出source的长度,+1是因为存储字符串时,后面还有个/0,
析构函数可以用来释放掉你分配的内存空间,或者是对象等等。
cin.getline(my_name,20);
用getline可以读入空格,如果仅用cin的话,输入时遇到空格就停止读入了。