tôi có mã này để đại diện cho ngân hàng:
Thao tác với con trỏ đến đối tượng lớp được thừa kế thông qua con trỏ tới lớp cơ sở vật
class Bank {
friend class InvestmentMethod;
std::vector<BaseBankAccount*> accounts;
public:
//...
BaseBankAccount là một lớp trừu tượng cho tất cả các tài khoản trong ngân hàng:
class BaseBankAccount {
public:
BaseBankAccount() {}
virtual int getInterest() const = 0;
virtual int getInvestedSum() const = 0;
virtual void increaseDepositSum(int additionalSum) = 0;
virtual void close(std::string& reason) = 0;
virtual ~BaseBankAccount() {}
};
Vấn đề là, khi tôi thao tác với con trỏ đến các đối tượng lớp dẫn xuất thông qua con trỏ tới đối tượng lớp cơ sở, tập hợp các phương thức tôi có thể gọi bị hạn chế bởi giao diện công cộng BaseBankAccount - bất kể đối tượng REAL là gì.
Ví dụ, không phải mọi tài khoản có một tùy chọn để tăng tổng vốn đầu tư đã được - vì vậy, tôi didn`t bao gồm phương pháp này trong một lớp cơ sở:
class BankAccount: public BaseBankAccount {
protected:
BaseDeposit* deposit;
double sumInvested;
public:
BankAccount(int sum, int term, int inter): sumInvested(sum), depositTerm(term), interest(inter) {}
int getInterest() const { return interest; }
int getInvestedSum() const { return sumInvested; }
void prolong(int increaseTerm) {
depositTerm += increaseTerm;
}
void increaseInvestment(double addition) {
sumInvested += addition;
}
virtual ~BankAccount() {}
};
sau đó, tôi muốn gọi nó là:
Bank bank1(...);
bank1.accounts[i]->increaseInvestment(1000.0);
Vì vậy, tôi có thể làm gì để truy cập vào giao diện của các đối tượng lớp dẫn xuất trong trường hợp này? Theo như tôi biết, downcasting đến loại bê tông mỗi lần tôi cần gọi chức năng cụ thể không tốt.
Tạo thêm một lớp trừu tượng bắt nguồn từ điều này để mở rộng giao diện?
Tạo cấu trúc phân cấp song song cho từng loại cụ thể mà tôi cần thực hiện (trông hơi nặng để làm)?
phương pháp là ảo, tất nhiên - I 'm xin lỗi – chester89
có vẻ như với tôi rằng cách dễ nhất để giải quyết này là để đẩy mạnh lĩnh vực dữ liệu từ BankAccount tới lớp cơ sở của nó – chester89