非C++内建型别A和B, 在哪几种情况下B能隐式转化为A?

本文深入探讨了C++中四种类型转换的方法,包括公有继承、转换构造函数、非显式构造函数及赋值操作符重载,并详细解释了各方法的原理与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有四种方法:

?         第一种:classB: public A {}

B公有继承A,可以是间接公有继承,当把B的对象赋值给A,会发生隐式转换。

待求证,保护继承、私有继承、BA的成员能否发生转换?

?         第二种:classB:

{

OperatorA();

.

}

转换constructor。类B实现了隐式转化为类Acompiler会在需要的时候自动调用该函数发生类型转换,如果想要在代码中显式的调用转换函数才能发生类型转化,可以定义explicitoperator A()

?         第三种:class A

{

const B &

}

A实现了一个个non-explicit的构造函数,参数为B(还可以带其他的有缺省值的参数)

?         第四种:A&operator =(const B & 

赋值操作,不是正宗的隐式类型转换,但可以勉强算一个。

注意:对于类之间的公有继承总可以把子类转化为父类,只是把派生类对象切割为基类对象即可。

注意2上述第二种和第三种方法同时存在一个程序中,应该注意这样的调用:

fconst A &);

B b;

f(b)则会产生调用的二义性。

注意3如果不想使用隐式生成的函数(当然这些函数一般是缺省构造函数、copy构造函数和赋值构造函数),就要把它显式的禁止;对于一般的转换constructor可以添加explicit明确的要求显式的调用,compiler不能自动发生隐式转换。如:

Private

A &operator = (const B &;

A (const A & );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值