• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++隐式类类型转换和转换操作符

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 隐式类类型转换

C++语言定义了内置类型之间的几个自动转换。也可以定义如何将其他类型的对象隐式转换为我们的类类型,或将我们的类类型的对象隐式转换为其他类型。为了定义到类类型的隐式转换,需要定义合适的构造函数。可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换

class Sales_item
{
public:
    Sales_item(const std::string & isbn):s(isbn){
        cout << isbn << endl;
    }
    Sales_item(int number):n(number){
        cout << number << endl;
    }
private:
    std::string s;
    int n;
};

bool func(Sales_item si)
{
    return true;
}

int main()
{
    std::string null_book = "9-999-99999-9";
    int number = 30;
    func(null_book);//这里将string类型转换为Sales_item
    func(number);//这里将int类型转换为Sales_item
    system("pause");
    return 0;
}

输出结果:

使用一个string类型对象作为实参传给func函数,编译器使用接收一个string的Sales_item构造函数从null_book生成一个新的Sales_item对象,新生成的(临时的)Sales_item被传递给func函数

如果要抑制由构造函数定义的隐式转换,则需要将构造函数声明为explicit:

会报错:

也可以为转换显式使用构造函数:

但是此时,如果我们企图把Sales_item类型转换为int类型:

就会报错:

如果要实现这样的赋值,就需要用到转换操作符:

class Sales_item
{
public:
    Sales_item(const std::string & isbn):s(isbn){
        cout << isbn << endl;
    }
    Sales_item(int number) :n(number){
        cout << number << endl;
    }

    operator int() const { return n; }
    operator string() const { return s; }

private:
    std::string s;
    int n;
};

bool func(Sales_item si)
{
    return true;
}

int main()
{
    std::string null_book = "9-999-99999-9";
    int number = 30;
    func(Sales_item(null_book));
    func(Sales_item(number));


    Sales_item si(30);
    Sales_item si2("a-123-12345-9");
    cout << "------------------------------------------" << endl;
    string s = si2;
    cout << s << endl;
    int number2 = si;
    cout << number2 << endl;

    system("pause");
    return 0;
}

输出结果:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
callingc++fromgolangwithswig--windowsdll(一)发布时间:2022-07-14
下一篇:
c#winformtextbox与combox让用户不能输入发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap