以下为定义的图形继承体系:
class Shape{
public:
// . . .
virtual double area(){}
};
class Circle:public Shape{
public:
double area(){…}
// . . .
};
class Triangle:public Shape{
public:
double area(){…}
// . . .
};
// . . .
以下为容器类:
class Manage{
shape *a[100];
public:
// . . .
}
要求完成Manage类的拷贝构造函数,实现深度拷贝;可以改动所有的类,并给出main函数测试程序。
(最好能教一下)
关于继承的题,如何做到题目要求?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- threenewbee 2019-06-22 12:27关注
// Q766790.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; class Shape{ public: virtual double area() = 0; }; class Circle: public Shape{ public: double r; double area(){ return 3.14 * r * r; } }; class Triangle: public Shape{ public: double h; double e; double area(){ return h * e / 2.0; } }; class Manage{ private: Shape *a[100]; int n; public: int GetCount() { return n; } Manage() { n = 0; } void Add(Shape * shp) { a[n++] = shp; } Shape* Get(int index) { return a[index]; } Manage(Manage& other) { cout << "copy ctor" << endl; for (int i = 0; i < other.n; i++) a[i] = other.a[i]; n = other.n; } }; int main() { Circle c1, c2; c1.r = 1.2; c2.r = 10; Triangle t1, t2; t1.e = 1; t1.h = 2; t2.e = 10; t2.h = 5; Manage m1; m1.Add(&c1); m1.Add(&c2); m1.Add(&t1); Manage m2 = m1; m2.Add(&t2); cout << m1.GetCount() << endl; cout << m2.GetCount() << endl; for (int i = 0; i < m2.GetCount(); i++) cout << "area: " << m2.Get(i)->area() << endl; return 0; }
copy ctor
3
4
area: 4.5216
area: 314
area: 1
area: 25
Press any key to continue稍微讲解一下,具体你要看书
构造函数的作用是构造一个对象
它的定义方式是,不要写返回值类型,函数名和类同名
Manage() { n = 0; }
Manage(Manage & other)
{
for (int i = 0; i < other.n; i++)
a[i] = other.a[i];
n = other.n;
}
这两个就是构造函数
拷贝构造函数的意思是,带有一个参数是另一个这个类的对象
Manage(Manage & other)
这个就是拷贝构造函数
Manage m2 = m1;
这里调用了拷贝构造函数
也可以写
Manage m2(m1);
深度拷贝的意思是,将原来的对象的数组的值依次拷贝过来,而不是仅仅让这个对象的a指向被拷贝的那个对象。
可以看出,给m2再增加shape,则m1的数量不会发生变化。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 5无用
悬赏问题
- ¥35 平滑拟合曲线该如何生成
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 自己瞎改改,结果现在又运行不了了
- ¥15 链式存储应该如何解决
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站