/*
//得到A的每一个变量的偏移地址offset,可以产生一个object,也可以不产生~
#include <iostream>
#include <functional>
using namespace std;
struct A{
int i;
int j;
};
int main(void){
A a;
cout << (unsigned long)(&(a.j)) - (unsigned long)(&(a)) << endl;//这种方式可以行得通
cout << (unsigned long)(&((A*)0)->j) << endl; //这种方式感觉更好,这里需要理解 (A*)0的意思
}
*/
//第二个例子是切割,以及dynamic_cast的用法,以及强制转化 static_cast之间的用法
#include <iostream>
#include <functional>
using namespace std;
class A{
public:
A(){
}
virtual void print(){
cout << "A" << endl;
}
};
class B :public A{
public:
B(){
}
void print(){
cout << "B" << endl;
}
};
void printClass(A b){
b.print();
}
int main(void){
A *derived = dynamic_cast<B*>(new B());
B s = (*static_cast<B*>(derived));
A g = *derived;
printClass(*derived);
printClass(g);
}
类间偏移地址以及切割,static_cast
最新推荐文章于 2024-08-16 15:19:27 发布