gpt4 book ai didi

c++ - 为什么要初始化这个数据成员?

转载 作者:行者123 更新时间:2023-11-28 03:14:31 26 4
gpt4 key购买 nike

<分区>

我正在做一些测试...首先贴出我的源代码

.h 文件

class Complex{
private:
int r = 0;//initializer
int i ;
public:
Complex(int , int I = 0);
Complex();
void print();
void set(int, int I = 1);
static void print_count();
static int count;
};

.cpp 文件

#include <iostream>
#include "complex.h"

int Complex::count = 1;

Complex::Complex(int R , int I){
r = R;
i = I;

count++;

std::cout << "constructing Complex object...count is " << Complex::count << std::endl;
}

Complex::Complex(){//default constructor
std::cout << "default constructor is called..." << std::endl;
}

void Complex::print(){
std::cout << "r = " << r << ';' << "i = " << i << std::endl;
return;
}

void Complex::set(int R, int I /*= 2*/){//will be "redefaulting", an error
r = R;
i = I;
return;
}

void Complex::print_count(){//static
Complex::count = -1;//jsut for signaling...

std::cout << "count is " << count << std::endl;
return;
}

主要功能

#include <iostream>
#include "complex.h"

int main(){
Complex d;//using default constructor
d.print();

/*Complex c(4, 5);*/
Complex c(4);
//c.print();

/*c.set(2, 3)*/
c.print();
c.set(2 );
c.print();

std::cout << "count is " << c.count << std::endl;//c can access member data
c.print_count();
c.count++;//

return 0;
}

考虑使用默认构造函数构造的 Complex 对象 d

因为数据成员r是用with 0初始化的,所以在执行d.print()时,r 应为 0

我不是,所以我希望它是垃圾值

但是当我测试时,一件奇怪的事情发生了。

如果我在主文件中删除这行代码和以下代码行:

std::cout << "count is "<< c.count << std::endl;//c可以访问成员数据

然后 d.print() 会在我的系统上给出 i 的值 32767,我猜这是一个垃圾值;

但是一旦添加了该行,d.print() 就会在我的系统上将 i 的值设为 0。

我不明白。我没有设置、修改或初始化i的值,为什么它应该是0?

或者,它也是一个垃圾值?

或者,调用其中一个函数会破坏 i 的值?

这里的幕后操作如何?

感谢您的帮助。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com