先决条件: C++中的类型转换 C++中显式关键字的使用
在C++中,如果一个类有一个构造函数,它可以用一个参数调用,那么这个构造函数就变成了转换构造函数,因为这样的构造函数允许自动转换到正在构造的类。
实例
C++
#include <iostream> class MyClass { int a, b; public : MyClass( int i) { a = i; b = i; } void display() { std::cout << " a = " << a << " b = " << b << "" ; } }; int main() { MyClass object(10); object.display(); // Single parameter conversion constructor is invoked. object = 20; object.display(); return 0; } |
输出:
a = 10 b = 10a = 20 b = 20
转换构造函数: 有些构造函数将其参数的类型转换为类的类型。编译器使用这些构造函数执行隐式类类型转换。这些转换是通过调用相应的构造函数来实现的,该构造函数与分配给该对象的值/对象列表相匹配。
前面的示例只处理一个参数,将其扩展到多个参数,即扩展初始值设定项列表或带括号的初始化列表。也就是说,我们用一对大括号({})将要传递给它的参数括起来。
具有多个参数的示例:
C++
#include <iostream> class MyClass { int a, b; public : MyClass( int i, int y) { a = i; b = y; } void display() { std::cout << " a = " << a << " b = " << b << "" ; } }; int main() { MyClass object(10, 20); object.display(); // Multiple parameterized conversion constructor is invoked. object = { 30, 40 }; object.display(); return 0; } |
输出:
a = 10 b = 20a = 30 b = 40
注:
- 扩展初始值设定项列表在C++11及更高版本中可用。
- 我们可以在创建对象时直接尝试将扩展初始值设定项列表分配给该对象。
- 构造函数的隐式类类型转换功能不会影响其正常行为。
- 为构造函数使用显式函数说明符将删除使用该构造函数的隐式转换
转换构造函数的用法
1.在函数的返回值中:
当函数的返回类型是类时,我们可以返回 大括号初始化列表 现在,由于返回类型是一个类实例,因此该类的对象是用 大括号初始化列表 ,假定该类具有相应的转换构造函数。
例子:
MyClass创建_对象(int x,int y) { 返回{x,y}; }
这个函数 创建_对象 将返回一个带有a和b值的MyClass对象,作为传递给函数的x和y。
2.作为函数的参数: 当函数的参数类型是类时,我们可以传递 大括号初始化列表 假定类具有相应的转换构造函数,则将函数作为实际参数。
举个例子:
无效显示对象(MyClass obj) { obj。显示(); } //在主函数中调用此函数时,会使用一个带括号的init列表,并将两个整数作为参数。 //例如: //显示对象({10,20});
注: 这个函数 显示对象 创建名为obj的MyClass的新类实例,并将调用其成员函数display()。
字幕:巴拉斯·维涅什J K