编写一个程序,计算由3个并联的子电路组成的电路的总电阻。子电路由两个串联或并联的电阻器组成(如图3-11 )。首先创建一个纯虚类Resistance,含有CalcRes()纯虚函数,由Resistance派生出串联类SeriesRes和并联类ParallelRes,两个类都包含同名的CalcRes()函数计算子电路的电阻值。输入电阻值,输出总电阻值,所有子电路使用一个循环计算总电阻。(选做) 提示: 串联电阻方程为:Rtot=R1+R2 并联电阻的方程为:Rtot=1/(1/R1+1/R2) 其中,R1和R2是单个电阻器的电阻。 在主函数中定义一个基类指针数组,用于存放子电路对象的地址,通过循环来遍历数组,使用地址来调用每个子电路对象的函数,从而实现多态性
时间: 2023-11-22 16:55:52 浏览: 184
以下是程序代码:
```
#include <iostream>
#include <cmath>
using namespace std;
class Resistance {
public:
virtual double CalcRes() = 0;
};
class SeriesRes : public Resistance {
private:
double R1, R2;
public:
SeriesRes(double r1, double r2) {
R1 = r1;
R2 = r2;
}
virtual double CalcRes() {
return R1 + R2;
}
};
class ParallelRes : public Resistance {
private:
double R1, R2;
public:
ParallelRes(double r1, double r2) {
R1 = r1;
R2 = r2;
}
virtual double CalcRes() {
return 1 / (1 / R1 + 1 / R2);
}
};
int main() {
Resistance* circuits[3];
double res1, res2, res3, total_res;
cout << "Enter resistance values for circuit 1 (separated by a space): ";
cin >> res1 >> res2;
circuits[0] = new SeriesRes(res1, res2);
cout << "Enter resistance values for circuit 2 (separated by a space): ";
cin >> res1 >> res2;
circuits[1] = new ParallelRes(res1, res2);
cout << "Enter resistance values for circuit 3 (separated by a space): ";
cin >> res1 >> res2;
circuits[2] = new SeriesRes(res1, res2);
total_res = 0;
for (int i = 0; i < 3; i++) {
total_res += circuits[i]->CalcRes();
}
cout << "Total resistance of the circuit: " << total_res;
return 0;
}
```
程序中,先定义了一个抽象基类 Resistance,包含一个纯虚函数 CalcRes(),表示计算电阻值的函数。然后分别定义了两个派生类:SeriesRes和ParallelRes,分别表示串联电路和并联电路。这两个派生类都重载了 CalcRes() 函数,实现了相应的电阻计算方法。
在 main 函数中,先定义了一个 Resistance 指针数组 circuits,用于存放子电路对象的地址。然后通过循环,依次输入每个子电路的电阻值,并根据电路类型创建相应的子电路对象并存储到 circuits 数组中。最后再通过循环遍历 circuits 数组,使用地址来调用每个子电路对象的 CalcRes() 函数,从而计算出总电阻值。
运行程序,输入每个子电路的电阻值,程序会输出总电阻值。
阅读全文