CPP 运算符 = 介于 2 个类之间
Cpp Operator = between 2 classes
我在VS2010中遇到了一个令人惊讶的问题。
这是我的主要标题.h.cpp
class A;
class B;
class A
{
public:
double x,y;
A();
~A();
A(const A &obj);
A(const B &obj);
A& operator=(const A &obj);
};
class B
{
public:
double x,y;
B();
~B();
B(const B &obj);
B& operator=(const B &obj);
};
main.cpp 包含方法和 的声明:
#include "header.h"
#include <iostream>
int main() {
A t;
B u;
A a(u);
t=u;
return 0;
}
如您所见,要做
A a(u);
我不得不添加此方法
A(const B &obj);
但对于
t=u;
它使用
A& operator=(const A &obj);
为什么我没有收到错误?
如果你想
避免这种情况,你应该将你的"A from B"构造函数标记为explicit
:
explicit A(const B &obj);
编译器将使用任何未标记为显式的构造函数进行隐式转换。
通过添加A(const B &obj);
,您提供了一种将 B 转换为 A 的方法,该方法用于t=u;
,以便编译器可以执行您的要求并且不需要错误。 可以进行转换,因为参数const A &obj
允许转换。
如果出于某种原因,A(const B &obj)
是卑鄙的,但您也希望t=u
失败,那么您必须使用显式关键字禁用隐式类型转换。
这意味着,只有当您专门将 B 转换为 A 的实例时,才会执行转换。
相关文章:
- 介于 1 和 100 之间的质数列表
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 放大倍率低于 125% 默认 win API(介于 101 - 124% 之间)
- C++ 中介于 0 和 1 之间的随机数
- 创建一个带有限制的数字数据类型,一个介于 -10 和 10 之间的整数
- 如何将数据从顶点着色器传递到介于两者之间的片段着色器
- 有效地介于小型和大型浮标之间
- 生成 0 或 1,而不是介于两者之间
- 本应生成 2 个介于 1 和 9 之间的随机数的程序C++只生成 6 和 9 并且没有正确循环
- 为什么指针减法会导致介于两者之间的元素数量
- 将两个数字替换为给定数组中介于两个之间的单个数字
- 在 C/C++ 中生成介于 2 个限制之间的随机素数
- CPP 运算符 = 介于 2 个类之间
- 介于 2 个值之间的随机数
- 我们应该使用哪种数据类型来输入一个介于 0<= 数字 <= 10^18 之间的数字
- 如何在c++中生成一个介于1和16之间的随机数
- 什么是介于2 int变量之间的mean管道运算符
- C++生成一个介于 0 和 100,000 之间的随机数
- C++ 创建一个介于 0.1 和 10 之间的随机小数
- 如何在 c++ 中生成介于 0 和变量之间的随机双精度