나는 몇 가지 테스트를하고있어이 ... 첫째 내 소스 코드를 게시이 데이터 멤버가 초기화되는 이유는 무엇입니까?
.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;
}
de 데이터 멤버 R은 0 d.print 실행시에()를 사용하여 초기화되기 때문에
ctor에 잘못 R 0
될 예정 난 아니므 I는 쓰레기 값으로 예상
하지만 테스트 할 때 이상한 일이 발생합니다.
나는 주 파일에서 코드의 다음 줄을 제거하는 경우 :
표준 : : cout과는 < < < < c.count < < 표준 : ENDL "수는있다"; // c를 액세스 할 수 있습니다 회원 데이터
그러면 d.print()는 시스템의 32767로 i의 값을 제공합니다. 이는 가비지 값이라고 생각합니다.
하지만 일단 해당 행이 추가되면 d.print()는 시스템에서 i의 값을 0으로 지정합니다.
나는 그것을 얻지 않는다. 나는 값을 설정, 수정 또는 초기화하지 않았으며, 왜 0이어야 하는가?
또는 가비지 값입니까?
또는 이러한 함수 중 하나를 호출하면 i의 값이 손상됩니다.
여기 장면 뒤에는 어떤 일이 발생합니까?
thx
저는 초급자입니다. 작은 테스트 시간을 보내고 이것들이 나쁘지는 않습니다. 설명하는 것과 똑같은 일을하는 것을 보는 것이 좋습니다. –