The Student Class with Private Data fields (for lab)

The Student Class with Private Data fields (for lab)

标签(空格分隔): 程序设计实验 c++

本人学院


description

The class “Student” is declared as below.

Student {

 public:

  Student();

  Student(int, const char*, int);

  void set(int, const char*, int);

  void print();

 private:

  int id;

  char name[50];

  int age;

};

Please implement the class to get expected output. You don’t need to submit the main function.

If the following main function is used, your implementation should get the expected output in the sample.

int main() {

  Student std1, std2(123, "John Smith", 19), std3(124);

  std1.set(100, "Bill Gates", 55);

  std1.print();

  std2.print();

  std3.print();

  return 0;

}

Sample Output:
Bill Gates (100) is 55 years old.
John Smith (123) is 19 years old.
No Name (124) is 0 years old.

Hint:

Private Data fields.

Default arguments.

main.cpp

#include <iostream>
#include "Student.h"
using std::cin;
int main() {
    int test;
    int id, nid, age;
    char names[10][20] = { "Aries", "Bill gates",
                           "John Smith", "Blanton",
                            "Blanche", "Halley",
                            "Hamilton", "Rachel",
                            "Jacobs", "Jan"};
    cin >> test;
    cin >> id >> nid >> age;
    if (test == 0) {
        Student st;
        st.print();
    } else if (test == 1) {
        Student st(id, names[nid], age);
        st.print();
    } else if (test == 2) {
        Student st;
        st.set(id, names[nid], age);
        st.print();
    } else if (test == 3) {
        Student st(id);
        st.print();
    } else {
        Student st(id, names[nid]);
        st.print();
    }
  return 0;
}

读题

my answer

Student.h

#ifndef STUDENT_H
#define STUDENT_H
#include<iostream>
using namespace std;
class Student {
    public:
        Student(int = 0, const char* = "No Name", int = 0);
        void set(int, const char*, int);
        void print();
    private:
        int id;
        char name[50];
        int age;
};

Student::Student(int i, const char* n, int a) {
    id = i;
    age = a;
    int j;
    for (j = 0; *n != '\0'; j++) {
        name[j] = *(n++);
    }
    name[j] = '\0';
}
void Student::set(int i, const char* n, int a) {
    id = i;
    age = a;
    int j;
    for (j = 0; *n != '\0'; j++) {
        name[j] = *(n++);
    }
    name[j] = '\0';
}
void Student::print() {
    cout << name << " (" << id << ")" << " is " << age << " years old." <<endl;
}

#endif

the standard answer

Student.h

#ifndef _STUDENT_H
#define _STUDENT_H

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>

class Student {
 public:
  Student();
  Student(int, const char*, int);
  void set(int id_, const char* name_, int age_);
  void print();

 private:
  int id;
  char name[50];
  int age;
};

Student::Student() {
    id = 0;
    snprintf(name, sizeof("No Name"), "No Name");
    age = 0;
}

Student::Student(int id_, const char* name_ = "No Name", int age_ = 0) {
    id = id_;
    snprintf(name, sizeof(name), name_);
    age = age_;
}

void Student::set(int id_, const char* name_, int age_) {
    id = id_;
    snprintf(name, sizeof(name), name_);
    age = age_;
}
void Student::print() {
    printf("%s (%d) is %d years old.\n", name, id, age);
}
#endif

反馈

snprintf()函数
将const char * 转换为 string
第一个参数为目的string的变量名
第二个参数为要复制的长度
第三个参数为源const char *的变量名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值