C++中强制类型转换的应用

 

  1.派生类作为实参赋给父类形参

在子类对象作为实参赋给父类类型的形参时,该父类的成员函数由于被子类继承所以可以通过父类形参调用共有方法,而子类的新方法会被自动忽略而父类也就无法调用子类的新方法了。

 //这之前表述有问题

  问题:用父类的形参来访问子类的新方法。

  强制类型转换(这个可能会有风险,但是编译器不报错)

class Animal{
public:
  void Live(){
    cout<<" Living "<<endl;
  }
};
class Dog : public Animal{
public:
  void Jump(){
    cout<<" Jump "<<endl;
}
};
class Cat : public Animal{
    public:
};

   Animal * b = new Cat;
    ((Dog* )b) -> Jump(); //ok, 强制转化
    补充:如果父类指针指向子类对象,需要把父类的指针转化为指向子类对象的指针,来访问子类扩展成员这就是所谓的向下转。

  但是,向下转型是危险的,因为父类指针有可能没有指向子类对象。//这样试过,编译器是不报错的,但是按道理是不好这样强转了。

java父类强制转换成子类 c++父类强制转换子类_子类

//Dog没有继承Animal

 

java父类强制转换成子类 c++父类强制转换子类_子类_02

这样测试下来就是不报错。




  1.派生类作为实参赋给父类形参

在子类对象作为实参赋给父类类型的形参时,该父类的成员函数由于被子类继承所以可以通过父类形参调用共有方法,而子类的新方法会被自动忽略而父类也就无法调用子类的新方法了。

 //这之前表述有问题

  问题:用父类的形参来访问子类的新方法。

  强制类型转换(这个可能会有风险,但是编译器不报错)

class Animal{
public:
  void Live(){
    cout<<" Living "<<endl;
  }
};
class Dog : public Animal{
public:
  void Jump(){
    cout<<" Jump "<<endl;
}
};
class Cat : public Animal{
    public:
};
   Animal * b = new Cat;


    ((Dog* )b) -> Jump(); //ok, 强制转化
    补充:如果父类指针指向子类对象,需要把父类的指针转化为指向子类对象的指针,来访问子类扩展成员这就是所谓的向下转。

  但是,向下转型是危险的,因为父类指针有可能没有指向子类对象。//这样试过,编译器是不报错的,但是按道理是不好这样强转了。

java父类强制转换成子类 c++父类强制转换子类_子类

//Dog没有继承Animal

 

java父类强制转换成子类 c++父类强制转换子类_子类_02

这样测试下来就是不报错。