首页 > 试题广场 >

下面哪种情况下,B不能隐式转换为A?

[单选题]
下面哪种情况下,B不能隐式转换为A?
  • class B:public A{}
  • class A:public B{}
  • class B{operator A();}
  • class A{A(const B&);}
B。 
答案A,表示A是基类,B是派生类,向上级类型转换是隐式的,因为部分元素丢弃可以自动完成,向下转型是显式的因为不知道应该增加的值是什么。所以B不能。
答案C,Operator除了表示函数重载操作符,还可以表示B类型可以装换为A类型。这个知识点就有点偏了。
答案D,拷贝构造函数, B b = A 肯定是可以的。
发表于 2015-03-11 22:11:44 回复(4)
A 派生类转换为基类
B 基类转派生类,不能隐式转换
C 是隐式类型转换操作符
D 通过拷贝构造函数进行隐式转化
发表于 2015-06-09 14:41:02 回复(0)
考点:类之间的隐式转换与上下行转换
题目分析:
(A)A是基类,B是派生类,在公有继承方式下,派生类对象/对象指针、对象引用可以赋值给基类的对象/对象指针/对象引用(这时发生隐式转换)。因为派生类中包含了基类中的所有信息。注意:将派生类对象赋值给基类对象,会造成截切问题(派生类中专属的数据和行为会被丢弃掉)
(B)A是派生类,B是基类。基类对象对象指针、对象引用不能赋值给派生类的对象/ 对象指针、对象引用。原因同上。
(C) operator A()是B类中的一个类型转换函数,可以将B类对象隐式转换成B类对象。
(D)A(const B&)是A类的一个复制构造函数,可以将B类对象隐式转换成B类对象。
发表于 2016-08-12 19:32:29 回复(0)
题目看错了,注意public继承,public之后的是基类,A中A是基类,B是派生类,B转A的时候会产生切片问题,是可行的;
B中B是基类,A是派生类,因为A中有B中不存在的部分,隐式转换会发生问题,可以采用强制类型转换dynamic_cast<A> b;
C不太清楚,但可以肯定B错
D是复制构造函数,楚翔a=b;的时候可以调用,故可以隐式转换;
发表于 2015-09-05 10:59:51 回复(1)
yst头像 yst
拷贝构造函数可以进行隐式类型转换,operator除了表示重载外也表示隐式类型装换,子类对象可以隐式转换为父类对象,父类对象要增加数据成员必须要显示地转化为子类的对象。
发表于 2015-07-05 15:31:14 回复(0)
不是呀,这题目不是有问题吗,它又没有声明A是基类,B是派生类,它题目都不写
发表于 2021-10-31 15:01:30 回复(0)
上行转换比较安全,下行转换比较不安全。上行转换 是 子类对象转为父类对象,下行转换是 父类对象转换为子类对象。
c++四种转换,静态转换 动态转换 常量转换 重新解析转换
静态转换( static_cast ) ⽤于类层次结构中基类(⽗类)和派⽣类(⼦类)之间指针或引⽤的转换。
1、进⾏上⾏转换(把派⽣类的指针或引⽤转换成基类表示)是安全的;
2、进⾏下⾏转换(把基类指针或引⽤转换成派⽣类表示)时,由于没有动态类型检查,所以是不安全的。
3、⽤于基本数据类型之间的转换,如把int转换成char,把char转换成int。这种转换的安全性也要开发⼈员来保证
动态转换( dynamic_cast )
1、dynamic_cast主要⽤于类层次间的上⾏转换和下⾏转换;
2、在类层次间进⾏上⾏转换时,dynamic_cast和static_cast的效果是⼀样的;
3、在进⾏下⾏转换时,dynamic_cast具有类型检查的功能,⽐static_cast更安全
常量转换( const_cast )
1、该运算符⽤来修改类型的const属性。。
2、常量指针被转化成⾮常量指针,并且仍然指向原来的对象;
3、常量引⽤被转换成⾮常量引⽤,并且仍然指向原来的对象;注意:不能直接对⾮指针和⾮引⽤的变量使⽤const_cast操作符去直接移除它的const.
重新解析转换( reinterpret_cast )这是最不安全的⼀种转换机制,最有可能出问题。 主要⽤于将⼀种数据类型从⼀种类型转换为另⼀种类型。它可以将⼀个指针转换成⼀个整数,也可以将⼀个整数转换成⼀个指针
发表于 2023-11-06 21:39:28 回复(0)
派生类转换基类可以,反之不可以
发表于 2023-08-17 22:30:39 回复(0)
A 派生类转换为基类,部分元素可以自动丢弃,为隐式转换
B 积累转派生类不能隐式转换
C 隐式类型转换操作符
D 通过拷贝构造函数进行隐式转换
发表于 2022-01-13 21:47:49 回复(0)
继承
发表于 2021-03-10 01:16:18 回复(0)
答案A,表示A是基类,B是派生类,向上级类型转换是隐式的,因为部分元素丢弃可以自动完成,向下转型是显式的因为不知道应该增加的值是什么。所以B不能。
(C) operator A()是A类中的一个类型转换函数,可以将B类对象隐式转换成A类对象。
(D)A(const B&)是A类的一个复制构造函数,可以将B类对象隐式转换成A类对象。
编辑于 2020-08-12 22:45:52 回复(0)
只能够从派生类向基类转换,不能基类向派生类转换。
发表于 2019-03-07 21:48:47 回复(0)
Operator除了表示函数重载操作符,还可以表示B类型可以装换为A类型
发表于 2017-07-26 17:27:26 回复(0)
基类对象可以指向派生类的指针或者引用
发表于 2017-03-20 12:51:27 回复(0)
对于AB而言只需记住,子类可以给父类赋值,因为子类包括父类的所有信息;
C是重载函数运算符,这个可以进行隐式转换;
D是拷贝构造函数也是可以的;
发表于 2015-09-04 10:20:21 回复(0)
向上类型转化是隐式的,向下类型转化是显式的
发表于 2015-08-27 16:53:08 回复(0)
表示A是基类,B是派生类
向上级类型转换是隐式的,因为部分元素丢弃可以自动完成.
向下转型是显式的因为不知道应该增加的值是什么。所以B不能。
发表于 2015-08-26 15:58:42 回复(0)
B 不存在基类向派生类的隐式类型转换
c中operator A() const;为隐式转换函数,可将自身类型对象隐式转换成A类型对象
 1   void  changeFontSize(FontHandle f,  int  newsize);
 2   class  Font{
 3   public :
 4        operator  FontHandle()  const     // 隐式转换函数
 5       {
 6            return  f;
 7       }
 8   private :
 9       FontHandle f;
10   };
11  
12   Font f;
13   int  newsize;
14   changeFontSize(f, newsize);       // 将Font隐式转换成FontHandle
编辑于 2015-04-08 14:30:18 回复(0)
等待高手解释
发表于 2015-01-08 10:51:53 回复(0)