C++成员函数的使用有哪些限制

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:40:00
//请看下,第二个变量pnod为什么为空值?
#include<string.h>
#include<iostream.h>

class product
{
private:
char *pname;
char *pnod;
int num;

public:
void pdput(); //类中定义成员函数

product(char *p,char *n,int m) //初始化本类,即定义构造函数
{
strcpy(pname,p);
strcpy(pnod,n);
num=m;
}
};

//*以下为在类外定义的成员函数
void product::pdput()
{
cout<<"pname:"<<pname<<endl;
cout<<"pnod:"<<pnod<<endl;
cout<<"num:"<<num<<endl;

}
//*/

/*要使类外成员函数成为内联函数,需在函数头前冠以关键字inline
inline void product::pdput()
{
cout<<"pname:"<<pname<<endl;
cout<<"pnod:"<<pnod<<endl;
cout<<"num:"<<num<<endl;

}
*/

void main()
{

第一个pname也不对吧
pname与pnod你都没有分配内存怎么能strcpy呢?程序运行到 strcpy(pname,p);这里应该会崩溃吧
pname与pnod都需要分配内存

public:
void pdput(); //类中定义成员函数

product(char *p,char *n,int m) //初始化本类,即定义构造函数
{
pname = p;
pnode = n;
num=m;
}

为什么不直接赋值
pname=p;
pnod=n;

必须为其指针所指向的对象分配内存才可以进行strcpy操作。
如果没有分配内存,则:
strcpy(pname,p); 把p复制到哪里?没有内存存放!
这可能会导致未知的情况发生,程序会崩溃.

以下是修改后的程序。
注:用构造分配内存(new),
必须要用析构(delete)释放内存,否则会造成内存泄露(memory leak)

#include<string.h>
#include<iostream.h>

class product
{
private:
char *pname;
char *pnod;
int num;

public:
void pdput(); //类中定义成员函数

product(char *p,char *n,int m) //初始化本类,即定义构造函数
{

pname=new char[strlen(p)+1];//必须为其分配内存才可以进行strcpy操作
pnod=new char[strlen(n)+1];
strcpy(pname,p);
strcpy(pnod,n);
num=m;