构造函数调用问题
Constructor invocation issue
在此代码中尝试创建DOBJ4获取编译器错误
#include<iostream>
using namespace std;
class mod;
class name {
friend mod;
public:
name(const char* n) {
cout << "1 arg constructor for namen";
}
name() {
cout << "no arg constructor for namen";
}
name(const char* n, int i ){
cout << "2 arg constructor for namen";
}
};
class mod {
public:
mod() {
cout << "base class constructor invokedn";
}
};
struct derived : mod {
derived(name) {
cout << "derived constructor invokedn";
}
};
int main() {
name nobj;
derived dobj(nobj);
name nobj1("hello");
derived dobj1(nobj1);
derived dobj2("Hi");
name nobj2("yo", 2);
derived dobj3(nobj2);
// derived dobj4("go", 4);
return 0;
}
需要了解在dobj2
的情况下,当通行字符串调用构造函数时如何调用构造函数,但是如果dobj4
,则会导致错误。如何纠正此问题?
转换构造函数的规则在C++03
和C++11
中有所不同。
在C++03
中:只有一个参数的构造函数,或者在一个以上的参数中,其余的具有默认值的参数是隐式可转换的。
示例:
name(const char* n) {}
name(int n, int i = 0) {} // i has a default value
在C++11
中:上面的C++03
中定义的所有情况以及具有多个参数的构造函数。但是,此类构造函数必须为 brace-Initialized 。
示例:
derived dobj4({"go", 4}); // call to name(const char* n, int i) is brace-initialized
不必说,如果构造函数被声明为 explicit
,则不会转换。
我觉得您的问题可能短得多,更容易理解示例代码:
我离开了派生的名称,即使继承在这里没有相关性,但我将其删除为并不重要
#include<iostream>
class name {
public:
name() {
std::cout << "no arg constructor for namen";
}
name(const char* n) {
std::cout << "1 arg(" << n <<") constructor for namen";
}
name(const char* n, int i ) {
std::cout << "2 arg(" << n << ',' << i <<") constructor for namen";
}
};
struct derived {
derived(const name& n ) {
std::cout << "derived name constructor invokedn";
(void)n;
}
};
int main() {
name nobj;
derived dobj(nobj);
derived dobj2("Hi");
derived dobj4({"go", 4}); //see the initialization list instead of 2 parameters passing
return 0;
}
相关文章:
- 将值推送到 getter 函数调用的列表中时出现问题
- 在C++中实现类似 python "map"函数的问题:调用类成员函数
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 头文件会导致函数调用后原始数组出现问题
- OVerload函数调用问题
- 尝试构造包装器测量函数调用时间时出现问题
- C++ 嵌套构造函数调用问题
- 构造函数调用问题
- 将C++中涉及数组的函数调用转换为C#时出现问题
- 如何修复对strstr没有匹配函数调用的问题
- 推导函数调用时出现歧义问题
- 函数调用出现问题
- C ++要么是函数调用的循环问题
- 第一次制作了一个跨越几个类的程序,但我在函数调用方面遇到了问题
- 语义问题:调用'displayBoard'没有匹配函数
- 关于c++复制构造函数调用的问题
- 设计问题——一个函数调用所有三个函数
- 关于C++函数调用和计算的问题
- GCC 问题 - 没有匹配的函数调用
- std::mem_fun_ref问题:作为成员函数调用时作为函子断开