• 显式转换与隐式转换


    下面哪种情况下,B不能隐式转换为A?
    class B:public A{}
    class A:public B{}
    class B{operator A();}
    class A{A(const B&);}

    显式转换是由程序员自己主动完成,隐式转换是由编译器完成的,其二显示转换一般是由高向低,隐式转换是由低到高,其三显式转换的格式为类型(对象)或(类型)对象。

    static_cast, dynamic_cast, const_cast探讨

    • 用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类指针或引用)时,由于没有动态类型检查,所以是不安全的。



    public之后的是基类,A中A是基类,B是派生类,B转A的时候会产生切片问题,是可行的;


    表示A是基类,B是派生类,向上级类型转换是隐式的因为部分元素丢弃可以自动完成,向下转型是显式的因为不知道应该增加的值是什么。所以B不能。
    答案C,Operator除了表示函数重载操作符,还可以表示B类型可以装换为A类型。
    B中B是基类,A是派生类,因为A中有B中不存在的部分,隐式转换会发生问题,可以采用强制类型转换dynamic_cast<A> b;
    C不太清楚,但可以肯定B错
    D是复制构造函数,楚翔a=b;的时候可以调用,故可以隐式转换;
     
     
     1 #include<iostream>
     2 using namespace std;
     3 class B0//基类BO声明
     4 {
     5 public://外部接口
     6     virtual void display()//虚成员函数
     7     {
     8         cout<<"B0::display0"<<endl;}
     9 };
    10 class B1:public B0//公有派生
    11 {
    12 public:
    13     void display() { cout<<"B1::display0"<<endl; }
    14 };
    15 class D1: public B1//公有派生
    16 {
    17 public:
    18     void display(){ cout<<"D1::display0"<<endl; }
    19 };
    20 void fun(B0 ptr)//普通函数
    21 {
    22     ptr.display();
    23 }
    24 int main()//主函数
    25 {
    26     B0 b0;//声明基类对象和指针
    27     B1 b1;//声明派生类对象
    28     D1 d1;//声明派生类对象
    29     fun(b0);//调用基类B0函数成员
    30     fun(b1);//调用派生类B1函数成员,子类向上隐式类型转换为父类
    31     fun(d1);//调用派生类D1函数成员,子类向上隐式类型转换为父类
    32 }

    正确答案: A 

    B0::display() B0::display() B0::display()
    B0::display() B0::display() D1::display()
    B0::display() B1::display() D1::display()B0::display() B1::display() B1::display(
    虚函数的动态绑定仅在 基类指针或引用绑定派生类对象时发生  ,fun的形参不是指针,所以调用哪个版本的函数编译时就已经确定,
    根据形参静态类型确定调用B0的成员。

    此题的关键点在于fun函数,传入的参数是一个类的对象,这样,派生类作为参数传入的时候,会自动的类型转换为基类对象,
    这样,display就只是执行基类的函数了。选B0::display() B0::display() B0::display()





  • 相关阅读:
    JournalNode的作用
    mysql57重新安装后无法再次启动mysql57服务“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动。”--解决方法
    oracle基础语法
    MYSQL 8.0.11 安装过程及 Navicat 链接时遇到的问题
    MySQL 字符串函数:字符串截取
    java基础总结
    mysql 排名
    mysql——查询重复数据,及删除重复数据只保留一条数据
    松软科技课堂:jQuery 效果
    松软科技课堂:jQuery 效果
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/5931922.html
Copyright © 2020-2023  润新知