代码
class Base{
public:
Base():m(
0){};
//Base(const Base& rhs):m(rhs.m){cout<<"Copy constructor, rhs is "<<&rhs<<" this pointer is "<<this<<endl;}
void add(){m++;};
int m;
};
class Derived : public Base{};
int main(){
Derived d;
cout
<<d.m<<endl;
static_cast
<Base&>(d).add();
cout
<<d.m<<endl;
//so called "slicing problem"
static_cast<Base>(d).add();
 
//Base(static_cast<Base&>(d)).add();
cout<<d.m<<endl;
return 0;
}

 

嘿嘿,猜猜看static_cast<Base>(d).add(); 这一行,编译器到底干了些什么.

 

相关文章:

  • 2021-08-03
  • 2022-12-23
  • 2021-09-13
  • 2022-01-17
  • 2022-02-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-04-15
  • 2021-11-23
  • 2021-06-15
  • 2021-08-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案