1.
有如下类定义及类应用,试问,该程序输出为( )
class CStudent
{
int sno;
public:
static int stuCount;
CStudent(int sno):sno(sno) { stuCount++;}
~CStudent(){}
};
int CStudent::stuCount=0;
int main()
{
CStudent stu1(1);
CStudent *pstu=new CStudent(2);
cout<<stu1.stuCount;
}
我的答案:
0分
(1) 1
正确答案:
(1) 2
原思路:为什么stuCount++会被调用两次
解决:因为在 main
函数中创建了两个 CStudent
对象,每个对象的构造函数都会使 stuCount
增加1。静态成员变量 stuCount
属于类本身,而不是类的某个特定对象,它的值在所有对象间共享。因此,无论创建多少个对象,stuCount
只会记录总共创建的对象数。
2.
class CStudent
{
int sno;
public:
static int stuCount;
CStudent(int sno):sno(sno) { stuCount++;}
CStudent():sno(0) { stuCount++;}
~CStudent(){}
};
int CStudent::stuCount=0;
int main()
{
CStudent stu1(1);
CStudent *pstu=new CStudent[2];
cout<<stu1.stuCount;
}
我的答案:
0分
(1) 1
正确答案:
(1) 3
问题:这里的 stuCount为什么是3;
解决:使用 new
关键字动态分配了一个包含两个 CStudent
对象的数组 pstu
。由于数组中的每个元素都是通过默认构造函数 CStudent()
创建的,这个构造函数也会增加 stuCount
,因此 stuCount
会再增加 2(因为数组有两个元素)。
5. (判断题)如下类定义是否正确:
class CStudent
{
int sno;
int stuCount;
public:
CStudent(int sno):sno(sno) { }
static void display(){cout<< stuCount;}
~CStudent(){}
};
问题:这个定义错在了哪个地方
解决:
stuCount
被错误地声明为实例变量,但在display
函数中却被当作静态成员来使用。如果stuCount
旨在跟踪所有CStudent
对象的数量,它应该是一个静态成员变量。display
函数试图访问一个非静态成员stuCount
,但这是不允许的。静态成员函数只能访问其他静态成员