반응형
생성자에서 const 필드를 초기화하는 방법은 무엇입니까?
C ++ 클래스 Foo와 Foo 포인터가 전달되는 생성자로 생성되어야하는 클래스 Bar가 있다고 가정 해보십시오.이 포인터는 Bar 인스턴스 수명주기에서 변경 불가능한 상태로 유지됩니다. 올바른 방법은 무엇입니까?
사실 아래 코드처럼 쓸 수 있다고 생각했는데 컴파일이 안 돼요 ..
class Foo;
class Bar {
public:
Foo * const foo;
Bar(Foo* foo) {
this->foo = foo;
}
};
class Foo {
public:
int a;
};
어떤 제안이라도 환영합니다.
이니셜 라이저 목록에서 수행해야합니다.
Bar(Foo* _foo) : foo(_foo) {
}
(혼란을 피하기 위해 들어오는 변수의 이름을 변경했습니다.)
이니셜 라이저에서해야한다고 생각합니다. 예를 들면 :
Bar(Foo* foo) : foo(foo) {
}
참고로 foo가 가리키는 것을 절대 변경하지 않으려면 참조로 전달하십시오.
Foo& foo;
Bar(Foo& foo) : foo(foo) {
}
const 멤버 및 기타 특수한 경우 (부모 클래스와 같은) 초기화는 이니셜 라이저 목록에서 수행 할 수 있습니다.
class Foo {
private:
const int data;
public:
Foo(int x) : data(x) {}
};
또는 유사하게 부모 초기화의 경우
class Foo {
private:
int data;
public:
Foo(int x) : data(x) {}
};
class Bar : Foo {
public:
Bar(int x) : Foo(x) {}
};
이니셜 라이저 목록에서 foo를 초기화해야합니다.
class Bar {
Foo* const foo;
public:
Bar(Foo* f) : foo(f) {...}
};
Use a reference:
Foo& foo;
Bar(Foo& f) : foo(f) { }
You can then refer to foo
easily in Bar
:
foo.doSomething();
try: Bar(Foo* xfoo) : foo(xfoo) {}
참고URL : https://stackoverflow.com/questions/1423696/how-to-initialize-a-const-field-in-constructor
반응형
'UFO ET IT' 카테고리의 다른 글
Windows에서 'dnu'명령을 찾을 수있는 위치 (0) | 2020.11.17 |
---|---|
Maven의 일부 모듈에서 테스트 건너 뛰기 (0) | 2020.11.17 |
Python의 새 스타일 속성으로 '속성을 설정할 수 없습니다' (0) | 2020.11.17 |
파이썬 용 Vim에서 구문 강조 (0) | 2020.11.17 |
UTF-8 (또는 최소한 독일어 움라우트)을 사용하는 Latex의 리스팅 (0) | 2020.11.16 |