static_cast关键字(编译时类型检查)
代码如下:
#include <iostream>
using namespace std;
class Base{
public :
Base(const int baseData){
m_baseData = baseData;
}
void print()const{
cout << "m_baseData is " << m_baseData << endl;
}
private:
int m_baseData;
};
class Upgrade :public Base{
public:
Upgrade(const int upgradeData) :Base(upgradeData){
m_upgradeData = upgradeData;
}
void setGradeData(const int &data){
m_upgradeData = data;
}
void print()const{
cout << "m_upgradeData is " << m_upgradeData << endl;
}
private:
int m_upgradeData;
};
int main(){
double double_1 = 100.0001;
int a = static_cast<int>(double_1);
cout << "double_1 is " << double_1 << endl;
cout << "a is " << a << endl;
Base *base = new Base(100);
cout << "base print:";
base->print();
Upgrade *upgrade = new Upgrade(101);
cout << "upgrade print:";
upgrade->print();
Base *castBase1 = static_cast<Base*>(upgrade);
cout << "castBase1 print:";
castBase1->print();
Upgrade *caseUpgrade1 = static_cast<Upgrade*>(upgrade);
cout << "caseUpgrade1 print:";
caseUpgrade1->print();
Upgrade *caseUpgrade2 = static_cast<Upgrade*>(base);
cout << "caseUpgrade2 print:";
caseUpgrade2->print();
Upgrade *caseUpgrade3 = (Upgrade*)base;
cout << "caseUpgrade3 print:";
caseUpgrade3->print();
cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;
caseUpgrade3->setGradeData(1);
cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;
Base *base_base = upgrade;
cout << "base_base print:";
base_base->print();
delete upgrade;
//delete base;
getchar();
return 0;
}
运行截图如下:
这里就提一点:
Upgrade *caseUpgrade3 = (Upgrade*)base;
cout << "caseUpgrade3 print:";
caseUpgrade3->print();
cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;
caseUpgrade3->setGradeData(1);
cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;
Base *base_base = upgrade;
cout << "base_base print:";
base_base->print();
delete upgrade;
//delete base;
这里把子类指针强指到了父类,并且还修改了子类的值,这真是个骚包的操作!!!
我的电脑是小端系统。
但是不能对base进行析构,会报如下的错误。
delete base;
原因是:分配了len长度的空间,却用到了len + 1的长度,释放的时候就报错了