写一个学生类中包含一个日期类作为子对象的程序,且不能用string类的函数
时间: 2023-06-06 14:07:15 浏览: 76
好的,请稍等,我正在生成答案。
以下是一个示例代码,可能不是最优解,但可以满足题目的要求:
class Date{
private:
int year, month, day;
public:
Date(int y=0, int m=0, int d=0):year(y), month(m), day(d){}
void setDate(int y, int m, int d){year=y; month=m; day=d;}
};
class Student{
private:
int id;
Date birthdate;
public:
Student(int i=0, int y=0, int m=0, int d=0):id(i), birthdate(y,m,d){}
void setId(int i){id=i;}
void setBirthdate(int y, int m, int d){birthdate.setDate(y,m,d);}
};
以上代码定义了一个日期类Date和一个学生类Student。学生类包含一个日期类对象作为子对象。
在学生类中,用set方法设置学生的id和出生日期。这里没有使用string类的函数,而是直接用整数表示年月日。
相关问题
写一个学生类中包含一个日期类作为子对象的程序,且不能用string类的函数,用char类型的数组来存名字,用char 类型的指针来做形参
好的,这个问题属于编程类问题,可以回答。
以下是一个基本的学生类中包含日期类的程序:
```
#include<iostream>
using namespace std;
class Date{
private:
int year;
int month;
int day;
public:
Date(int y=0,int m=0,int d=0):year(y),month(m),day(d) {}
void setDate(int y,int m,int d){
year=y;
month=m;
day=d;
}
void showDate(){
cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;
}
};
class Student{
private:
char name[30];
char* ptr;
Date birthday;
public:
Student(char* n,Date b){
ptr=name;
while((*ptr++=*n++)!='\0'){}
birthday=b;
}
void showStudent(){
ptr=name;
cout<<"姓名:";
while(*ptr!='\0') cout<<*ptr++;
cout<<endl<<"生日:";
birthday.showDate();
}
};
int main(){
Date date(1999,9,9);
Student student("张三",date);
student.showStudent();
return 0;
}
```
注意,这个程序中没有使用string类的函数,用char类型的数组来存储名字,用char类型的指针来做形参。同时,日期类作为学生类的子对象。
一个类的构造函数可以不包含对其子对象的初始化吗?
当一个类中包含有其他类的对象时,我们称这个类为组合类。对于组合类的构造函数,其初始化列表中必须对成员对象进行初始化,否则编译会报错。
例如,假设我们有一个组合类`Person`,其中包含有一个`Address`类的对象:
```c++
class Address {
public:
Address(string city, string street) : city_(city), street_(street) {}
private:
string city_;
string street_;
};
class Person {
public:
Person(string name, int age) : name_(name), age_(age) {}
private:
string name_;
int age_;
Address address_; // Address 对象
};
```
在上面的代码中,`Person`类包含有一个`Address`对象。当我们创建`Person`对象时,需要对`Address`对象进行初始化。因此,`Person`类的构造函数应该如下:
```c++
Person(string name, int age, string city, string street) :
name_(name), age_(age), address_(city, street) {}
```
在上面的代码中,`address_`对象在构造函数的初始化列表中被初始化了,这是必须的。如果没有初始化`address_`对象,编译器将会报错。因此,一个类的构造函数必须包含对其子对象的初始化。