클래스 내에서 클래스의 속성이되는 난수를 생성하는 메서드를 구현하려고합니다. 개체 생성자 내에서 randomPropertyGenerator 메서드를 호출하고 있습니다.
문제를 재현하기위한 최소 코드는 다음과 같습니다.
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <random>
using namespace std;
class Object {
public:
double randomProp;
double randomPropGen(double a, double b);
Object() {
double randomProp = randomPropGen(0.0, 1.0);
}
};
double Object::randomPropGen(double min, double max){
std::uniform_real_distribution<double> distribution(min, max);
std::random_device rd;
std::default_random_engine generator(rd());
return distribution(generator);
}
int main(int argc, char *argv[]){
std::uniform_real_distribution<double> distribution(0.0, 1.0);
std::random_device rd;
std::default_random_engine generator(rd());
Object o = Object();
for (int i = 0; i < 10; i++){
double randomProp2 = distribution(generator);
cout << "This is randomProp from object " << o.randomProp << endl;
cout << "This is randomProp2 inside main " << randomProp2 << endl;
cout << "\n" << endl;
}
return 0;
}
코드를 컴파일하고 실행하면 다음과 같은 결과가 나타납니다.
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.688014
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.263372
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.689736
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.392283
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.96836
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.401998
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.91537
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.608586
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.168815
This is randomProp from object 8.35785e-318
This is randomProp2 inside main 0.631994
보시다시피 내 클래스의 메서드 내에서 생성 될 때 randomProp은 항상 동일하고 항상 0에 매우 가까운 것처럼 보이지만 기본 클래스에서 생성 된 randomProp이 더 의미가 있습니다. 누군가 내가 뭘 잘못하고 있고 어떻게 고칠 수 있는지 말해 줄 수 있습니까? 당신의 도움을 주셔서 감사합니다!
생성자에서 :
Object() {
double randomProp = randomPropGen(0.0, 1.0);
}
라는 지역 변수를 선언하고 초기화합니다 randomProp
. 이 지역 변수는 생성자 내부에만 존재합니다. 동일한 이름의 구성원이 있지만 두 개의 별개 개체이므로 구성원이 uninitialzed입니다. 이니셜 라이저 목록에서 멤버를 초기화 할 수 있습니다.
Object() : randomProp(randomPropGen(0.0,1.0) {
}
기억해야 할 간단한 규칙은 다음과 같습니다. 멤버는 생성자 본문에서 초기화되지 않습니다 (대신 멤버 이니셜 라이저 목록 또는 기본 이니셜 라이저, 여기 참조 ).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다