C 带有什么默认复制构造函数使用什么初始化基本复制构造函数
c++ what does Derived Default copy constructor initialize Base copy constructor with?
代码:
#include<iostream>
using namespace std;
class B{
public:
int b;
B(int x):b(x){
cout << "B() Constructor " << endl;}
B(const B& m):b(m.b){
cout << "B(const B&) copy constructor "<< endl;}
};
class D:public B{
public:
D(int x):B(x){
cout << "D() Constructor " << endl;}
D(const D& n):B(n){ // at this point n should be casted to B object !!?
cout << "D(const D&) copy constructor " << endl;}
operator B(){
cout << "operator B" << endl;
return B(this->b);}
};
int main(){
D ob(1);
cout << "---" << endl;
D oc=ob;
}
输出:
B() Constructor
D() Constructor
---
B(const B&) copy constructor
D(const D&) copy constructor
问题:
1)如果我不提供D
复制构造函数,则D
的默认复制构造函数必须通过调用B
复制构造器来初始化基本对象。我的问题是B
的复制构造函数将采用什么?它是D
对象,然后将其施加到B
对象?
2)在D
的复制构造函数中,我使用D
对象n
初始化B
,并且没有呼叫operator B()
的呼叫,证明D
类型的对象n
没有将其施加到B
,因此可以将其作为一个传递,因此可以通过与B
复制构造函数一起参数。有任何对此行为的解释吗?
首先,A cast 是您在代码中编写的内容,以告诉编译器进行转换。转换有两类:隐式和明确。在不需要的情况下,将在需要时进行隐式转换。明确的转换需要铸件。您在这里谈论的是隐式转换,而不是演员。
的答案是,从对派生类型的引用到对基本类型的引用中存在隐式转换。这就是简单的:n是一个d&amp;,可以传递给获得b&amp;的函数。仅通过隐式转换其类型。
相关文章:
- 是什么让放置新调用对象的构造函数?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 构造函数后面的宏.什么意思?
- C++构造函数内部会发生什么?
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 我是否为邪恶刽子手的构造函数错过了什么?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 什么时候用指针调用C++类构造函数
- 这个构造函数是做什么的
- 将复制构造函数设置为private和=delete有什么区别
- 我不明白在这个例子中什么时候调用构造函数
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- c++ 17 中结构自动定义构造函数的规则是什么?
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- C++什么时候是使用无默认构造函数与getter和setters与直接调用类中的变量的正确时机
- 在成员初始值设定项列表和构造函数主体中委派构造函数有什么区别
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?