使用数组作为对象调用派生类的方法
Call methods from derived class using a array as an object
帐户是基类,检查和保存是我试图设置速率的派生类(这是Cheking和保存类中的一种方法)。我该如何调用这种方法。插图是代码的骨架。鉴于我的经验不足,欢迎任何建议。
class Account {
public:
void setAccNum(long acct) {
}
void setBalance(double bal) {
}
string toString(){
}
double virtual computeIntr(int years) {
}
};
class Checking : public Account {
public:
Checking() {
}
Checking(long acct, double bal) : Account(acct, bal) {
}
void setMinIntrBalance(int minb) {
}
void setRate(int r) {
}
double computeIntr(int years) {
}
string toString() {
}
};
class Saving : public Account {
public:
Saving() {
}
Saving(long acct, double bal, double rate) : Account(acct, bal) {
}
void setRate(double rate) {
}
double computeIntr(int years) {
}
string toString() {
};
int main() {
Account **accountPtrs;
accountPtrs = new Account*[100];
for (int i = 0; i < 100; i++) {
accountPtrs[i] = nullptr;
}
accountPtrs[0] = new Checking(100, 1000 + 1000);
accountPtrs[1] = new Checking(101, 1000 + 1010);
accountPtrs[2] = new Checking(102, 1000 + 1020);
accountPtrs[3] = new Checking(103, 1000 + 1030);
accountPtrs[4] = new Checking(104, 1000 + 1040);
accountPtrs[5] = new Saving(200, 1000 + 2000, 3);
accountPtrs[6] = new Saving(201, 1000 + 2010, 3);
accountPtrs[7] = new Saving(202, 1000 + 2020, 3);
accountPtrs[8] = new Saving(203, 1000 + 2030, 3);
accountPtrs[9] = new Saving(204, 1000 + 2040, 3);
bool exit = true;
while (exit == true) {
cout << "5) Set Interest" << endl;
cout << " Please enter your choice: ";
int ch;
cin >> ch;
cout << endl;
switch (ch)
{
case 5:
{
bool a = true;
while (a == true) {
int h, b;
char t;
cout << "YOU WANT TO SET THE INTEREST OF AN ACCOUUNT." << endl;
cout << "Saving or checking: ";
cin >> t;
if (t == 'c' || t == 'C') {
cout << "Enter account number: ";
cin >> h;
h = h - 100;
cout << "ENTER THE INTEREST RATE:";
cin >> b;
accountPtrs[h]->setRate(); /////// THIS IS WHERE IT DOES NOT WORK , HOW CAN I CALL SUCH METHOD AND SET THE RATE
a = false;
}
else if (t == 's' || t == 'S') {
cout << "Enter account number: ";
cin >> h;
h = h - 100;
cout << "ENTER THE INTEREST RATE:";
cin >> b;
accountPtrs[h]-> setRate(b);
a = false;
}
else {
cout << "INVALID INPUT" << endl;
a = true;
}
}
break;
}
}
return 0;
}
您的数组成员是Account
-Objects的指针,但是Accout
不提供方法setRate
;只有子类都可以。您需要在Account
级别提供setRate
,然后将其空置实现或将其声明为抽象。然后,accountPtrs[h]->setRate()
将变得有效,并将称为各个子类的setRate
-实体:
class Account {
public:
...
virtual void setRate(int) = 0;
...
};
相关文章:
- 使用基类中的派生方法运行线程,而无需使用模板
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 使用库中的基础级别中的派生方法
- 如何通过功能指针调用派生方法
- C++ shared_ptr从派生方法返回此值
- C 基本方法称为而不是派生方法
- 可视化C++对象被上投射到基类;无法调用派生方法
- C++ 继承函数指针,可与派生方法一起使用
- 基本方法被调用而不是派生方法
- 正在调用基方法,而不是从构造函数派生方法
- 具有显式派生方法的C++接口
- 正在调用派生方法而不是Base
- 继承方法,派生方法调用的不是基
- 使用不在基类中的派生方法
- 如何使用基指针访问派生方法
- 是否可以显式使用祖先的虚拟类方法作为派生方法?
- 中的派生方法未在基类中调用
- 从基指针调用派生方法
- 从基类调用基类中不存在的派生方法