面向对象程序设计实验(构造函数与析构函数)

创建一个Employee类,该类中用字符数组存放Employee的信息,如姓名、地址、市、省、及邮政编码;每个成员函数的定义放在类定义之外;成员函数包括改变姓名数据成员等;构造函数完成成员数据的初始化;用Display()函数将完整的对象数据打印出来;其中数据成员是保护的,成员函数是公共的

 #include"iostream"
#include"cstring"
using namespace std;
class Employee
{
	
	protected:
	string name,address,city,province,postalcode;
	public:
		Employee(string a,string b,string c,string d,string e);
		void Display ();
		void changename();
};
Employee::Employee(string a,string b,string c,string d,string e)
{
		name=a;
			address=b;
			city=c;
			province=d;
			postalcode=e;
}
void Employee:: changename()
{
	string s;
	cin>>s;
	name=s;
}
void Employee::  Display ()
{
		cout <<name<<","<<address<<","<<city<<","<<province<<","<<postalcode<<endl;
}
int main()
{
	Employee q("zengxiaoxian","jiangxi","jian","jiangxi","123456");
	q.Display();
	q.changename();
	q.Display();
	
	return 0;
}

运行结果如下:

 string 比起c语言中的字符数组要好用,减少了指针的使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个经典的面向对象编程问题。下面是一个可能的解决方案: ```c++ #include <iostream> #include <cmath> using namespace std; class Shape { public: virtual double getArea() { return 0; } }; class Rectangle : public Shape { public: Rectangle(double _width, double _height) : width(_width), height(_height) { cout << "Constructing a rectangle..." << endl; } ~Rectangle() { cout << "Destructing a rectangle..." << endl; } double getArea() override { return width * height; } private: double width; double height; }; class Circle : public Shape { public: Circle(double _radius) : radius(_radius) { cout << "Constructing a circle..." << endl; } ~Circle() { cout << "Destructing a circle..." << endl; } double getArea() override { return M_PI * radius * radius; } private: double radius; }; class Square : public Rectangle { public: Square(double _side) : Rectangle(_side, _side) { cout << "Constructing a square..." << endl; } ~Square() { cout << "Destructing a square..." << endl; } }; int main() { Shape* shape1 = new Rectangle(3, 4); Shape* shape2 = new Circle(2); Shape* shape3 = new Square(2); cout << "Shape 1 area: " << shape1->getArea() << endl; cout << "Shape 2 area: " << shape2->getArea() << endl; cout << "Shape 3 area: " << shape3->getArea() << endl; delete shape1; delete shape2; delete shape3; return 0; } ``` 这个程序定义了一个基类 `Shape`,包含了一个虚函数 `getArea()` 用于计算面积。然后从 `Shape` 派生了两个类 `Rectangle` 和 `Circle`,分别表示矩形和圆形。这两个派生类都重写了 `getArea()` 函数,用于计算自己的面积。 另外,从 `Rectangle` 派生了正方形类 `Square`。由于正方形可以看做是一种特殊的矩形,因此 `Square` 类只需要调用 `Rectangle` 的构造函数即可。 在 `main()` 函数中,我们分别创建了一个矩形、一个圆形、一个正方形的对象,并分别计算了它们的面积。然后再释放这些对象(调用 `delete`),观察析构函数的调用次序。 运行这个程序,可以得到如下输出: ``` Constructing a rectangle... Constructing a circle... Constructing a rectangle... Constructing a square... Shape 1 area: 12 Shape 2 area: 12.5664 Shape 3 area: 4 Destructing a rectangle... Destructing a circle... Destructing a square... Destructing a rectangle... ``` 可以看到,构造函数析构函数的调用次序是符合预期的:先构造基类,再构造派生类;先析构派生类,再析构基类。同时,我们也成功地计算了不同图形的面积。 希望这个例子能够帮助你理解面向对象编程的基本思想和实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值