2024 4 17 c++ 错题

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(){}
};

问题:这个定义错在了哪个地方

解决:

  1. stuCount 被错误地声明为实例变量,但在 display 函数中却被当作静态成员来使用。如果 stuCount 旨在跟踪所有 CStudent 对象的数量,它应该是一个静态成员变量。
  2. display 函数试图访问一个非静态成员 stuCount,但这是不允许的。静态成员函数只能访问其他静态成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值