C 垃圾成员值时使用公共和私人超载构造函数
c++ garbage member values while using public and private overloaded constructors
#include <iostream>
using namespace std;
class date{
public:
int month;
int day;
int year;
private:
date(int x, int y, int z);
public:
date(int x, int y);
};
date::date(int x, int y, int z): month{x}, day{y}, year{z} {
cout << "Hello you called me PRIVATE constructor" << endl;
}
date::date(int x, int y){
cout << "Hello you called me PUBLIC constructor" << endl;
date(x, y, 100);
}
int main(){
date x{11, 21};
cout << x.month << endl;
cout << x.day << endl;
cout << x.year << endl;
}
您可以在上面的代码中看到,我有两个构造函数,在主要我创建两个参数的对象x中。
这应该致电公共构造商,该公共构造者又致电私人构造函数并初始化公共成员的月份和年度。
但是当我打印成员值时,我没有得到所需的结果。
Hello you called me PUBLIC constructor
Hello you called me PRIVATE constructor
392622664
1
0
输出应为:
Hello you called me PUBLIC constructor
Hello you called me PRIVATE constructor
11
21
100
我不知道我在哪里做错了什么。任何帮助将不胜感激。谢谢。
构造函数没有名称,也无法调用。表达式date(x, y, 100);
使用私有构造函数创建一个临时实例,该实例立即被破坏。您 can 委托构造,但您需要使用适当的构造委员会语法。要委派构造函数,您必须在初始化列表中这样做。它必须是初始化列表中的唯一元素。例如:
#include <iostream>
using namespace std;
class date {
public:
int month;
int day;
int year;
private:
date(int x, int y, int z);
public:
date(int x, int y);
};
date::date(int x, int y, int z) : month{ x }, day{ y }, year{ z } {
cout << "Hello you called me PRIVATE constructor" << endl;
}
date::date(int x, int y) : date(x, y, 100) {
cout << "Hello you called me PUBLIC constructor" << endl;
}
int main() {
date x{ 11, 21 };
cout << x.month << endl;
cout << x.day << endl;
cout << x.year << endl;
}
作为其他答案状态,无法直接调用构造函数;但是,它们可以直接从其他构造函数(在C 11开始)中直接调用,但是语法非常具体。
date::date(int x, int y):
date(x, y, 100)
{
cout << "Hello you called me PUBLIC constructor" << endl;
}
ie必须称它们为初始列表的一部分。
请注意,这将以与您指定的不同顺序称为
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 构造函数超载以接受任何功能
- 构造函数超载和Sfinae
- 在C 构建器中超载Mainform构造函数
- 超载构造函数中的未指定字段
- 使用超载运算符添加构造函数
- C 垃圾成员值时使用公共和私人超载构造函数
- 为什么在C 中超载邮政增量运算符两次调用构造函数
- 为什么调用超载构造函数会导致默认构造函数的调用
- C 17:始终调用用户定义的构造函数,并且运算符 超载不适用于儿童课程
- 超载构造函数不适用于单个链接列表
- 成员初始化超载构造函数
- 构造函数超载产生混乱
- 将复制构造函数超载与DELETE,然后调用C 子类的默认构造函数
- 类构造函数,超载构造函数和对象初始化
- C :类 - 超载构造函数 - 单个变量
- 使用超载构造函数分配