목록 구성원 변수의 초기화 초기화
3837 단어 초기화
#include <iostream>
using namespace std;
class Base
{
private:
int a;
int b;
public:
Base(int i):b(i),a(b){}
Base():b(0),a(b){}
int get_a(){return a;}
int get_b(){return b;}
};
int main()
{
Base base(90);
cout<<base.get_a()<<endl<<base.get_b()<<endl;
return 0;
}
원래 얻으려고 했던 결과는 a, b가 모두 90이었다.그러나 실제 결과는 다음과 같다.
4273046
90
Process returned 0 (0x0) execution time : 0.101 s
Press any key to continue.
즉 이때 출력의 첫 번째 수는 무작위 수이고 두 번째 수는 90이다.
초기화 목록의 구성원 변수의 초기화는 구성원 변수의 성명 순서에 따라 초기화됩니다!!!!!
변수 a는 변수 b에 앞서 설명한다. 그러면 클래스 베이스의 구조 함수 초기화 구성원 목록에서 변수 a는 먼저 정의하고 변수 b는 다음에 정의한다. 즉, 변수 a는 먼저 초기화하고 변수 b는 초기화한다. 그러므로 베이스(inti): b(i), a(b)를 실행할 때 a의 값은 b로 초기화하고 그 결과는 무작위 값이며 b의 값은 i=90!!!!!!!!!!!!!!!!!!!
성명의 순서를 바꾸거나 초기화하는 순서는 9090을 얻을 수 있다.예를 들면 다음과 같습니다.
#include <iostream>
using namespace std;
class Base
{
private:
//int a;
int b;
int a;//
public:
Base(int i):b(i),a(b){}
Base():b(0),a(b){}
int get_a(){return a;}
int get_b(){return b;}
};
int main()
{
Base base(90);
cout<<base.get_a()<<endl<<base.get_b()<<endl;
return 0;
}
결과:
90
90
Process returned 0 (0x0) execution time : 1.057 s
Press any key to continue.
원인은 초기화 목록에서 구성원 변수의 초기화 순서는 클래스에서 설명하는 순서가 아니라 클래스에서 설명하는 순서입니다.!!!!!
구성원 변수 성명과 일치하는 순서에 따라 구조 함수 초기화 목록을 작성하는 것을 주의해야 한다. 또한 구성원을 사용하여 다른 구성원을 초기화하는 것을 최대한 피해야 한다. 일반적인 상황에서 구조 함수의 인삼을 사용하여 대상의 데이터 구성원을 사용하지 않고 초기화의 집행 순서로 인한 문제를 피할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WordPress 초기화플러그인을 사용하여 쉽게 초기화할 수 있습니다. 플러그인은 무엇입니까? 이를 위해 설치 및 활성화 및 초기화 방법을 설명합니다. 플러그인 설치 사이드바 플러그인을 클릭하고 맨 위에 있는 새로 추가를 클릭합니다. 메뉴...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.