注册 登录
编程论坛 C++教室

这个题不太理解

我叫赫卡忒 发布于 2016-10-30 21:18, 1429 次点击
实现Student类,要求该类对象在创建时,可以自动生成学号
Student  s1 ;               //学号1
Student  stu[10];      //学号将依次是2……11
6 回复
#2
yangfrancis2016-10-30 21:26
作为一个类,在不传入参数的情况下要让它自动生成学号实在是不科学。当然还是可以实现,用一个全局变量来记录上一个实例的学号是多少就行。
short n=1;
class Student
{
private:
    short number;
public:
    Student(){number=n++;}
}
这样应该可以了吧。试一下看
#3
我叫赫卡忒2016-10-30 22:26
不可以直接初始化吗?用含参的构造函数
#4
rjsp2016-10-31 08:26
static

程序代码:
#include <iostream>

class Student
{
public:
    Student() : id_(++gid_)
    {
    }
private:
    size_t id_;
    static size_t gid_;

    friend std::ostream& operator<<( std::ostream& os, const Student& s );
};

size_t Student::gid_ = 0;

std::ostream& operator<<( std::ostream& os, const Student& s )
{
    return os << s.id_;
}

using namespace std;

int main( void )
{
    Student s1;
    Student stu[10];

    cout << s1 << '\n';
    for( size_t i=0; i!=sizeof(stu)/sizeof(stu[0]); ++i )
        cout << stu[i] << '\n';

    return 0;
}

#5
我叫赫卡忒2016-10-31 13:17
呃……我不太理解这个代码
#6
Jamescgm2016-11-01 15:55
回复 4楼 rjsp
在调试的时候显示这个
只有本站会员才能查看附件,请 登录
请问还需要引用什么东西吗?
#7
StadyC2016-11-01 17:52
可以定义一个带参的构造函数,定义一个该学生类的指针数组,然后就可以循环new了
#include<stdio.h>
#include<stdlib.h>

struct student
{
    public:
        student(int num)
        {
            No = num;
        }

        ~student()
        {
     
        }

        void display()
        {
            printf("%d ", No);
        }

    protected:
        int No;
};

int main(void)
{
    student *stu[10];
    int i = 0;
    while(i != 10)
    {
        stu[i] = new student(i + 1);
        stu[i]->display();
        ++i;
    }    //差不多就是这样
    printf("\n");

    i = 0;
    while(i != 10)
    {
        delete stu[i];
        ++i;
    }    //释放全部申请的空间
    return 0;
}


[此贴子已经被作者于2016-11-2 09:41编辑过]

1