老师课上布置的作业
要求如下:
(1)设计类Point2D,包含两个私有权限的double类型数据成员x和y,分别表示2D平面上点的x、 y坐标数值;( class Point2D )
(2)在Point2D类中包含两个参数的构造函数,构造函数的两个形参分别用以为数据成员x和y初始化;参数x、参数y的默认参数值分别为1.0、1.0;(3)在Point2D类中添加一个拷贝构造函数;
(4) Point2D类中包含一个用以输出数据成员x和y的print()成员函数,完成其具体的实现;
(5)完成Point2D类的公有派生类Point3D类,在派生类中新增一个私有权限的double类型数据成员z,表示点的z坐标数值;
(6)写出Poit3D类的具有3个参数的构造函数,3个参数的默认值依次为1.0、1.0、1.0,前2个参数初始化基类成员,后1个参数初始化新增加的数据成员。
(7)写出Point3D类的具有2个参数的构造函数,第1个参数为Point2D基类对象的引用,用以初始化继承的基类成员。后1个参数的默认值为2.0,用以初始化新增加的数据成
员z。
(8)以成员函数的形式重载^操作符,以实现double类型数据与自定义数据类型的相乘操作。例如Point3D p1(2.0,4.0.8.0)p2 p2=p1*9.6; (p1的x、y、z分别与9.6相乘)
这里是代码:
#include<stdio.h>
#include<iostream>
class Point2D {
public:
Point2D(double a = 1.0, double b = 2.0) :x(a), y(b) {
//printf("基类创建成功!");
};
Point2D(const Point2D& p) { x = p.x, y = p.y; };
void Print2D() {
printf("x坐标:%lf y坐标:%lf", x, y);
}
double getx() { return x; }
double gety() { return y; }
protected:
double x, y;
private:
};
class Point3D :public Point2D {
public:
Point3D(double a = 1.0, double b = 1.0, double c = 1.0) : z(c) {
x = a;
y = b;
//printf("子类创建成功!");
};
Point3D(Point2D &a, double c = 2.0) : z(c) {
x = a.getx();
y = a.gety();
//printf("子类创建成功!");
};
Point3D operator* (double a) {
Point3D P3(x, y, z);
P3.x *= a;
P3.y *= a;
P3.z *= a;
return P3;
}
void Print3D() {
Print2D();
printf(" z坐标:%lf", z);
}
protected:
private:
double z;
};
int main() {
std::ios::sync_with_stdio(false);
Point3D node(1, 2, 3);
node = node * 3;
node.Print3D();
return 0;
}