为什么我不能在没有EXC_BAD_ACCESS
错误的情况下执行以下代码?
所以p_base
是一个指向基类的指针数组。数组中的指针指向3个不同的类对象,它们都有自己的数据和基础数据。
在下面的代码中,我试图将基指针向下转换为派生类指针之一,这样我就可以访问该对象的一个属性来总结bank_fees
。
由于我不知道哪个迭代包含derived1
对象,所以我使用循环来向下转换所有对象指针,但它不正确。如何在不知道哪个迭代派生对象位于哪个?
class base{
protected:
string transaction_date_;
int transaction_id_;
double transaction_amount_;
public:
Transaction();
Transaction(string,int,double);
//Pure virtual function
virtual void Display() const = 0;
}
class derived1{
private:
double fee_charge_;
public:
double get_fee_charge() const{
return fee_charge_;
};
void set_fee_charge(double fee){
fee_charge_ = fee;
};
virtual void Display() const;
}
void Customer::method(){
double bank_fees = 0;
derived *p_derived1 = new derived1;
for(int i =0;i<16;i++){
p_base[i]->Display();
p_derived1 = dynamic_cast<derived*>(p_base[i]);
bank_fees += p_derived1->get_fee_charge();
}
cout << bank_fees;
}
答案 0 :(得分:0)
在tmp as! String
之后,您需要在使用指针之前检查它是否成功。
downcast
另外,你不需要
p_derived1 = dynamic_cast<derived1*>(p_base[i]);
if ( p_derived1 != nullptr )
{
bank_fees += p_derived1->get_fee_charge();
}
导致内存泄漏。您可以完全删除该行,并在循环中声明derived1 *p_derived1 = new derived1;
。
p_derived1