美文网首页C++学习笔记后台开发
C++中类类型的隐式转换

C++中类类型的隐式转换

作者: 浩浩浩DICE | 来源:发表于2014-05-27 16:37 被阅读303次

    C++中类类型的隐式转换示例
    <pre>#include <iostream>
    class A{
    public:
    A() :a(0){} //默认构造函数
    A(int i) :a(i){} //自定义构造函数
    void print(){ std::cout << a << std::endl; }
    private:
    int a;
    };

    int main(){
    A b = true; //隐式转换并执行拷贝初始化,布尔值转换为类类型A的一个实例,调用了自定义构造函数
    b.print();
    return 0;
    }</pre>注:C++中类类型的隐式转换只支持一步转换,以上代码只执行了一次转换,即将布尔值转换为int值带入自定义构造函数。

    如下面的示例所示

    <pre>#include <iostream>

    include <string>

    class A{
    public:
    A() :str(0){} //默认构造函数
    A(std::string s) :str(s){} //自定义构造函数
    void print(){ std::cout << str << std::endl; }
    A& add(const A &a){ str += a.str; return *this; }
    private:
    std::string str;
    };

    int main(){
    A b = "hello"; //隐式转换
    b.add(" world"); //错误,执行了两次转换,应改为b.add(std::string(" world"))
    b.print(); //输出 hello world
    return 0;
    }</pre>

    下面的示例展现了一个有趣的现象

    <pre>#include <iostream>
    class A{
    public:
    A() :a(0){} //默认构造函数
    //A(int i) :a(i){}
    void print(){ std::cout << a << std::endl; }
    A& operator=(int i){ a = i; return *this; } //拷贝赋值函数
    private:
    int a;
    };

    int main(){
    A b = 2; //失败,不存在适当的构造函数进行隐式转换
    A c; //调用默认构造函数
    c = 2; //成功,存在匹配的拷贝赋值函数
    c.print();
    return 0;
    }</pre>

    相关文章

      网友评论

        本文标题:C++中类类型的隐式转换

        本文链接:https://www.haomeiwen.com/subject/gvedtttx.html