各位高手帮我做下C++我的作业

来源:百度知道 编辑:UC知道 时间:2024/06/09 11:52:04
以下程序有什么错误?如有请予修改。
(1)使用静态成员函数
#include<iostream.h>
#include<string.h>
class Person{
public:
char m_strName[20];
long m_ID;
public:
Person(char * strName, long ID) {strcpy(m_strName, strName);m_ID=ID;}
static long GetID() { return m_ID; }
};
void main()
{
Person person1("LiuJun",110160524);
cout<<"ID="<<Person::GetID()<<'\n';
}

#include<iostream.h>
#include<string.h>
class Person{
public:
char m_strName[20];
long m_ID;
public:
Person(char * strName, long ID) {strcpy(m_strName, strName);m_ID=ID;}
static long GetID(Person &obj) { return obj.m_ID; }
};
void main()
{
Person person1("LiuJun",110160524);
cout<<"ID="<<Person::GetID(person1)<<'\n';
}
调试通过.一般而言,静态成员函数不访问类中非静态成员。若确实需要,静态成员函数只能通过对象名或指向对象的指针访问该对象的非静态成员。静态成员函数与静态数据成员一样,都是类的内部 实现,属于类定义的一部分。一个类只在源程序的代码中出现,并不会在一个正在内存运行的程序中出现,即类只在编译时存在,对象在类的运行的时候占据内存空间,即在运行时出现。普通的数据成员属于对象。也就说当静态成员函数访问费静态成员时,这个非静态成员还没出现,编译器还不知道这是什么,所以会报错。自己可以想一下为什么通过指针就可以了,如果不明白可以留言给我。