定义日期类,在主函数中定义日期类对象,并定义指向日期类对象的指针,通过指针调用给对象赋值和输出的 成员函数。 输入输出说明: 输出: 2007.11.22
时间: 2024-03-06 11:49:27 浏览: 23
好的,这是一个C++编程题,需要你编写代码来实现要求的功能。下面是代码参考:
```c++
#include <iostream>
using namespace std;
class Date {
private:
int year, month, day;
public:
void set(int y, int m, int d) {
year = y;
month = m;
day = d;
}
void output() {
cout << year << "." << month << "." << day << endl;
}
};
int main() {
Date d1;
d1.set(2007, 11, 22);
d1.output();
Date* pd = &d1;
pd->set(2008, 12, 31);
pd->output();
return 0;
}
```
输出结果:
```
2007.11.22
2008.12.31
```
说明:
- Date类定义了set和output成员函数,用于给对象赋值和输出日期。
- 在主函数中,首先创建一个Date对象d1,通过调用set函数给d1对象赋值,并通过调用output函数输出日期。
- 然后,定义一个指向Date对象的指针pd,并将其指向d1对象。
- 通过指针pd调用set函数和output函数,修改d1对象的值并输出。
相关问题
这里为什么不是派生类对象对象的地址赋值给基类的指针
实际上,将派生类对象的地址赋值给基类指针也是可以的,这也是向上转型的一种形式。例如,假设有一个 `Dog` 对象,可以将其地址赋值给一个 `Animal` 指针,如下所示:
```
Dog* dog = new Dog();
Animal* animal = dog;
```
在这里,`dog` 指针指向一个 `Dog` 对象,然后将其地址赋值给 `animal` 指针,这是合法的,因为 `Dog` 是 `Animal` 的公有派生类。这种转换被称为向上转型,因为它将一个派生类指针转换为一个基类指针。
需要注意的是,如果在向上转型之后使用基类指针调用虚函数,将调用基类中的实现,而不是派生类中的实现。如果想要调用派生类中的实现,需要使用动态绑定技术,即将虚函数声明为虚函数,并在派生类中覆盖该函数。
如果公有派生,则可以用基类对象的地址赋值给派生类的指针
如果是公有派生,则可以将基类对象的地址赋值给派生类的指针。这是因为在公有派生中,派生类包含基类的所有成员,因此可以将基类指针隐式地转换为派生类指针。这种转换被称为向上转型。例如,假设有一个基类 `Animal` 和一个公有派生类 `Dog`,则可以将 `Animal` 对象的地址赋值给 `Dog` 指针,如下所示:
```
Animal* animal = new Dog();
```
这里,`new Dog()` 创建了一个 `Dog` 对象,并返回该对象的地址,该地址被隐式转换为 `Animal*` 类型,然后赋值给 `animal` 指针。在 `animal` 指针上调用的任何虚函数都将调用 `Dog` 类中的实现,因为 `Dog` 是 `Animal` 的公有派生类。