클래스 조합은 초기화 문제와 관련이 있다
class A
{
public:
A(int _a)
{
a = _a;
cout << " " << "a" << a << endl;
}
~A()
{
cout << " " << "a" << a << endl;
}
protected:
private:
int a;
};
class B
{
public:
protected:
private:
int b1;
int b2;
A a2;
A a1;
};
void obj10play()
{
A a1(10);
B ojbB;
return ;
}
void main()
{
obj10play();
system("pause");
}
오류의 근원은 클래스 B에 메모리를 분배할 때 클래스 A가 클래스 B 구성원 변수의 일부이기 때문에 개인은 클래스 A에 이미 참고 함수가 있다고 생각한다. 클래스 B에 정의된 클래스 A는 파라미터가 없기 때문에 클래스 A의 구조 함수를 실행할 수 없다. 즉, 클래스 A의 입구를 찾을 수 없기 때문에 클래스 B는 메모리를 만들 수 없다. 이렇게 바꾸면 클래스 A의 매개 변수 구조 함수를 무 참고 함수로 바꿀 수 있다.
class A
{
public:
A()
{
cout << " " << "a" << a << endl;
}
~A()
{
cout << " " << "a" << a << endl;
}
protected:
private:
int a;
};
class B
{
public:
protected:
private:
int b1;
int b2;
A a2;
A a1;
};
void obj10play()
{
A a1();
B ojbbB;
return;
}
void main()
{
obj10play();
system("pause");
}
아, 역시 운행은 정상입니다. 문제가 생겼습니다. 클래스 B로 클래스 A를 초기화할 수 없습니다. 아무런 의미가 없습니다. C++는 이러한 문법을 제공했습니다. constructor: m1 (v1), m2 (v2), m3 (v3).다음은 수정 후입니다.
class A
{
public:
A(int _a)
{
a = _a;
cout << " " << "a" << a << endl;
}
~A()
{
cout << " " << "a" << a << endl;
}
protected:
private:
int a;
};
class B
{
public:
B(int _b1, int _b2) : a1(1), a2(2), c(0)
{
}
B(int _b1, int _b2, int m, int n) : a1(m), a2(n), c(0)
{
b1 = _b1;
b2 = _b2;
cout <<"B "<<endl;
}
~B()
{
cout<<"B " <<endl;
}
protected:
private:
int b1;
int b2;
A a2;
A a1;
const int c;
};
void obj10play()
{
A a1(10);
B ojbB(1, 2);
B ojbB2(1, 2,3, 4);
return ;
}
void main()
{
obj10play();
system("pause");
}
이렇게 하면 문제가 해결된다. 본질적으로 나는 함수 파라미터를 구성하는 대칭 문제라고 생각한다.
constructor: m1(v1), m2(v2), m3(v3) 같은 문법은 클래스 구성원 변수의 정렬 순서에 따라 실행되며 이 문법의 정렬 순서가 결정되지 않습니다.끝나다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.