我有以下代码;
#include <iostream>
using namespace std;
struct Slog1
{
char ime1;
int broj1;
};
struct Slog2
{
char ime2;
int broj2;
};
int main()
{
Slog1 aSlog, bSlog;
Slog2 cSlog;
aSlog = bSlog; // 1
bSlog.ime1 = cSlog.ime2; // 2
aSlog = cSlog; // 3
}
Run Code Online (Sandbox Code Playgroud)
现在,我宣布:
Slog1 aSlog, bSlog;
Slog2 cSlog;
Run Code Online (Sandbox Code Playgroud)
这些是结构变量,我很清楚.现在我有这些:
aSlog = bSlog; // 1
bSlog.ime1 = cSlog.ime2; // 2
aSlog = cSlog; // 3
Run Code Online (Sandbox Code Playgroud)
aSlog = bSlog; // 1
Run Code Online (Sandbox Code Playgroud)
每个成员都aSlog将被设置为相应的值bSlog.这是一个浅表副本,因此可能在此结构中的任何指针都将设置为相同的值.由于aSlog和bSlog是相同的类型,这是一个隐式的复制赋值运算符.
bSlog.ime1 = cSlog.ime2; // 2
Run Code Online (Sandbox Code Playgroud)
这会将ime1成员bSlog的值设置ime2为cSlog.这使用了复制赋值运算符char.
aSlog = cSlog; // 3
Run Code Online (Sandbox Code Playgroud)
这不应该编译,因为此代码中没有任何内容告诉编译器如何将类型Slog1转换为类型Slog2.您需要一个转换构造函数(在Slog1其中声明的构造函数接受一个Slog2参数).
struct Slog2
{
char ime2;
int broj2;
};
struct Slog1
{
char ime1;
int broj1;
// ...
// conversion-constructor
Slog1(const Slog2& s2) : ime1(s2.ime2), broj1(s2.broj2)
{ }
// copy-assignment conversion
Slog1& operator=(const Slog2& s2)
{
ime1 = s2.ime2;
broj1 = s2.broj2;
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)