R7-1 两点间距离计算 分数 20 全屏浏览题目 切换布局 作者 余春艳 单位 浙江大学 给出下面的一个基类框架: class Point_1D { protected: float x;//1D 点的x坐标 public: Point_1D(float p = 0.0); float distance(const Point_1D & p2); } 以Point_1D为基类建立一个派生类Point_2D,增加一个保护数据成员: float y;//2
时间: 2024-04-04 10:29:14 浏览: 113
D 点的y坐标
同时,在Point_2D类中增加一个计算两点间距离的公有成员函数:
float distance(const Point_2D & p2);
该函数可以计算当前点与另一个2D点p2之间的距离。
Point_2D类的定义如下:
class Point_2D : public Point_1D
{
protected:
float y; // 2D点的y坐标
public:
Point_2D(float x = 0.0, float y = 0.0) : Point_1D(x), y(y) {}
float distance(const Point_2D &p2);
};
Point_2D类的distance函数的实现如下:
float Point_2D::distance(const Point_2D &p2)
{
float dx = x - p2.x;
float dy = y - p2.y;
return sqrt(dx * dx + dy * dy);
}
其中,sqrt函数是C++标准库中的函数,用于计算一个数的平方根。
相关问题
现在要开发一个用于两个整数的(+-*/)四则运算系统,请使用多态实现。 给出下面的抽象基类框架 class AbstractCaculator{
好的,以下是使用多态实现四则运算系统的抽象基类框架:
```c++
class AbstractCalculator {
public:
virtual double calculate(double num1, double num2) = 0;
};
class AddCalculator : public AbstractCalculator {
public:
double calculate(double num1, double num2) override {
return num1 + num2;
}
};
class SubCalculator : public AbstractCalculator {
public:
double calculate(double num1, double num2) override {
return num1 - num2;
}
};
class MulCalculator : public AbstractCalculator {
public:
double calculate(double num1, double num2) override {
return num1 * num2;
}
};
class DivCalculator : public AbstractCalculator {
public:
double calculate(double num1, double num2) override {
if (num2 == 0) {
throw std::invalid_argument("division by zero");
}
return num1 / num2;
}
};
```
以上代码定义了一个抽象基类 `AbstractCalculator`,它包含了一个纯虚函数 `calculate`,用于计算两个数的结果。然后我们定义了四个具体的实现类 `AddCalculator`、`SubCalculator`、`MulCalculator` 和 `DivCalculator`,分别对应加法、减法、乘法和除法的计算方法。
这样,我们就可以通过多态来实现四则运算系统了。比如,我们可以这样使用:
```c++
double num1 = 10.0, num2 = 5.0;
AbstractCalculator* pAdd = new AddCalculator();
AbstractCalculator* pSub = new SubCalculator();
AbstractCalculator* pMul = new MulCalculator();
AbstractCalculator* pDiv = new DivCalculator();
std::cout << "num1 + num2 = " << pAdd->calculate(num1, num2) << std::endl;
std::cout << "num1 - num2 = " << pSub->calculate(num1, num2) << std::endl;
std::cout << "num1 * num2 = " << pMul->calculate(num1, num2) << std::endl;
std::cout << "num1 / num2 = " << pDiv->calculate(num1, num2) << std::endl;
delete pAdd;
delete pSub;
delete pMul;
delete pDiv;
```
输出结果为:
```
num1 + num2 = 15
num1 - num2 = 5
num1 * num2 = 50
num1 / num2 = 2
```
当然,这只是一个简单的例子,实际应用中可能需要更加复杂的计算方法和数据类型,但是使用多态的思想仍然是一样的。
R6-1 写出派生类构造方法(C++) 分数 10 全屏浏览题目 切换布局 作者 周强 单位 青岛大学 裁判测试程序样例中展示的是一段定义基类People、派生类Student以及测试两个类的相关C++代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。 函数接口定义: 提示: 观察类的定义和main方法中的测试代码,补全缺失的代码。 裁判测试程序样例: 注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关函数。 #include <iostream>
class People{
protected:
char *name;
int age;
public:
People(char *n, int a){
name = new char[strlen(n)+1];
strcpy(name, n);
age = a;
}
~People(){
delete []name;
}
};
class Student: public People{
private:
float score;
public:
// 请在此处补充派生类构造方法
Student(char *n, int a, float s): People(n, a){
score = s;
}
~Student(){}
};
int main(){
Student stu("Tom", 16, 90.5);
return 0;
}