클래스 조합은 초기화 문제와 관련이 있다

9799 단어
다음 코드에서 클래스 B에 클래스 A가 조합되어 있어 실행할 때 오류가 발생할 수 있습니다.
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) 같은 문법은 클래스 구성원 변수의 정렬 순서에 따라 실행되며 이 문법의 정렬 순서가 결정되지 않습니다.끝나다.

좋은 웹페이지 즐겨찾기