考虑我正在创建两个类的对象:
BaseClass B;
DerievedClass D;
Run Code Online (Sandbox Code Playgroud)
然后我在做:
B=D;
D=B;
Run Code Online (Sandbox Code Playgroud)
这是合法的,为什么.这是一个C++相关工作的面试官提出的问题.我知道大多数是B = D; 将是有效的(对象切片); 但它是这样D = B; 只有在B有默认构造函数时才有效?是的,那为什么呢?
B=D;
D=B;
Run Code Online (Sandbox Code Playgroud)
第一行将始终编译.第二行可能编译也可能不编译,因为它完全取决于你如何编写每个类.答案的其余部分将阐明它.继续阅读.
这是D = B; 只有在B有默认构造函数时才有效?
没有.
D=B仅在D定义了operator=哪个B作为参数时才有效.
Derived & operator=(const Base &base); //member of Derived
Base B;
Derived D;
D = B; //allowed - assignment
Run Code Online (Sandbox Code Playgroud)
或者,如果你这样做,在初始化D,那么它会有效仅当一个构造函数D需要B作为参数.
Derived(const Base &base); //a constructor of Derived
Base B;
Derived D = B; //allowed - initialization
Run Code Online (Sandbox Code Playgroud)
或B已定义用户定义的转换D.
operator Derived(); //member of Base
Base B;
Derived D = B; //allowed - initialization
D = B; //also allowed - assignment
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |