C++构造函数的隐式转化

#include<iostream>#include<string>usingnamespacestd;classBOOK{//定义了一个书类private:string... #include<iostream>
#include<string>
using namespace std;
class BOOK{ //定义了一个书类
private:
string _bookISBN; //书的ISBN号
float _price; //书的价格
public:
bool isSameISBN(const BOOK&other){ //定义了一个成员函数,这个函数即是那个期待一个实参为类类型的函数
return other._bookISBN==_bookISBN;} //这个函数用于比较两本书的ISBN是否相同
BOOK(string ISBN, float price=0.0f):_bookISBN(ISBN),_price(price){}
//类的构造函数,即那个能用一个参数调用的构造函数(虽然它有两个形参,但其中一个有默认实参,只用一个参数也能调用
};
void main(){
BOOK A("A-A-A");
BOOK B("B-B-B");
cout<<A.isSameISBN(B)<<endl; //正常的进行比较,无需转化
cout<<A.isSameISBN(string("A-A-A"))<<endl; //此处发生隐式转化:string类型->BOOK类型,借助BOOK类的构造函数转化,以满足
// isSameISBN函数的期待参数
cout<<A.isSameISBN(BOOK("A-A-A"))<<endl; //显示创建临时对象,也是编译器的工作
system("pause");
}

一个小程序,输出结果:
0
1
1

cout<<A.isSameISBN(string("A-A-A"))<<endl; 解释此处发生了隐式转化,即基本类型string转化成BOOK类类型,
这种隐式转化C++书上没有提到,请教专家:
1. 隐式转化的详细语法是怎样的呢?
2. 隐式转化需不需要程序员再写对应的函数?可否自己写函数完成类似的隐式转化呢?
展开
 我来答
百度网友711eabb
2017-10-09 · TA获得超过709个赞
知道小有建树答主
回答量:727
采纳率:83%
帮助的人:315万
展开全部
所谓的隐式转化;就是你没有定义的时候,编译器根据其内部默认规则进行转换;
1、隐式转换没有详细的语法规则,因为他不是程序员定义的;
2、隐式转换是程序员要怎么去避免的;因为强类型语言的通病,所以要深度考虑类型匹配;当别人用没有定义的类型去初始化的时候,就有可能引发隐式转换;所以要对各种初始化方式进行写构造函数;就可以避免;比如标准库中的string类,他的初始化方式有各式各样,除了体现他强大的功能外,另一个也避免了隐式转换;
3、隐式转换不是我们可以走的捷径,而是确实要考虑怎么去避免他,当然有的时候或许像浅拷贝一样,利用这种规则;但是不提倡
bernard
2017-10-09 · 超过12用户采纳过TA的回答
知道答主
回答量:121
采纳率:0%
帮助的人:22.4万
展开全部
调用bool isSameISBN(const BOOK&other)的时候因为有const修饰,所以允许传一个临时值进去,所以会隐式调用构造产生一个这样的临时对象
追问
若没有const修饰,就不能传STRING 的常量吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arongustc
科技发烧友

2017-10-08 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:5737万
展开全部
没有特别的语法,只要类型满足构造函数的参数即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式