C ++中的Dynamic_cast和static_cast
static_cast:用于普通/普通类型转换。这也是负责隐式类型强制的强制转换,也可以显式调用。在将float转换为int,将char转换为int等情况下,应使用它。这可以转换相关的类型类。如果类型不同,则会产生一些错误。
示例
#include<iostream>
using namespace std;
class Base {};
class Derived : public Base {};
class MyClass {};
main(){
Derived* d = new Derived;
Base* b = static_cast<Base*>(d); // this line will work properly
MyClass* x = static_cast<MyClass*>(d); // ERROR will be generated during compilation
}输出结果
[Error] invalid static_cast from type 'Derived*' to type 'MyClass*'
dynamic_cast:此强制转换用于处理多态。您只需要在转换为派生类时使用它。从基类转换为派生类时,只能在继承中使用它。
示例
#include<iostream>
using namespace std;
class MyClass1 {
public:
virtual void print()const {
cout << "This is from MyClass1\n";
}
};
class MyClass2 {
public:
virtual void print()const {
cout << "This is from MyClass2\n";
}
};
class MyClass3: public MyClass1, public MyClass2 {
public:
void print()const {
cout << "This is from MyClass3\n";
}
};
int main(){
MyClass1* a = new MyClass1;
MyClass2* b = new MyClass2;
MyClass3* c = new MyClass3;
a -> print();
b -> print();
c -> print();
b = dynamic_cast< MyClass2*>(a); //This cast will be failed
if (b)
b->print();
else
cout << "no MyClass2\n";
a = c;
a -> print(); //Printing from MyClass3
b = dynamic_cast< MyClass2*>(a); //Successfully casting is done
if (b)
b -> print();
else
cout << "no MyClass2\n";
}输出结果
This is from MyClass1 This is from MyClass2 This is from MyClass3 no MyClass2 This is from MyClass3 This is from MyClass3
热门推荐
10 祝福语大全简短赞美同学
11 朋友家住豪宅祝福语简短
12 周年庆典祝福语致辞简短
13 元旦联谊祝福语简短精辟
14 登上舞台祝福语大全简短
15 护士辞职送行祝福语简短
16 酒吧深情祝福语大全简短
17 关于开车的祝福语简短
18 新年的鸡汤祝福语简短