[英]calling child class function
如何從指向父項的類型為parent的指針調用子項功能?
class a{
public:
virtual void print(){cout << "From a" << endl;}
};
class b: public a{
public:
void print(){cout << "Form b" << endl;}
void printFunction(){cout << "Exist in b" << endl;}
};
int main() {
a* Obj = new b;
Obj->print();
Obj->printFunction();
return 0;
}
在這里,我有一個指向“ b”的類型“ a”的指針。 我想調用僅在類b中定義的“ printFunction”。
我收到此錯誤:
“ class a”沒有名為“ printFunction”的成員
問題是如何使用該指針調用“ printFunction”? 或如何在此處申請演員?
使用dynamic_cast
:
class a{
public:
virtual ~a(){}
virtual void print(){ cout << "From a" << endl; }
};
class b: public a{
public:
void print(){ cout << "Form b" << endl; }
void printFunction(){ cout << "Exist in b" << endl; }
};
int main() {
a* Obj = new b;
Obj->print();
b* bObj = dynamic_cast<b*>(a);
if (bObj)
bObj->printFunction();
delete a;
return 0;
}
您可以使用dynamic_cast轉換進行下調
class base {
public:
void print() {std::cout << "base class print";}
};
class derived : public base {
public:
void printFunction() {std::cout << "derived class print";}
};
int main() {
base* ptr_derrived = new derived();
if(Derived* d = dynamic_cast<derived*>(ptr_derived) {
std::cout << "downcast successful\n";
d->printFunction(); // safe to call
}
delete ptr_derrived;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.