C++ 구문 오류: 기본 클래스 생성자 호출이 올바르지 않습니다. 어떻게 처리해야 하나요?
C++ 프로그래밍에서는 기본 클래스 생성자가 호출되는 상황에 자주 직면합니다. 그러나 이 과정에서 기본 클래스 생성자가 잘못 호출되는 경우가 있습니다. 이러한 상황으로 인해 프로그램이 비정상적으로 종료되거나 알 수 없는 오류가 발생하는 경우가 많습니다. 이러한 상황이 발생하더라도 당황하지 마세요. 이 문서에서는 잘못된 기본 클래스 생성자 호출과 이를 처리하는 방법을 자세히 소개합니다.
1. 기본 클래스 생성자의 잘못된 호출
C++에서 파생 클래스의 생성자는 기본 클래스의 모든 멤버가 올바르게 초기화되도록 기본 클래스의 생성자를 호출해야 합니다. 일반적으로 파생 클래스 생성자의 멤버 초기화 목록에서 기본 클래스 생성자를 호출하는 것이 가장 일반적인 방법입니다. 그러나 기본 클래스 생성자를 호출하는 데 실수를 하면 기본 클래스 생성자가 잘못 호출되는 상황이 발생합니다. 아래에는 기본 클래스 생성자 호출이 잘못된 몇 가지 일반적인 상황이 나열되어 있습니다.
#include<iostream> using namespace std; class Base{ public: Base(){} Base(int a){ cout<<"Base class with value : "<<a<<" ";} }; class Derived: public Base{ public: Derived(){} Derived(int a){ cout<<"Derived class with value : "<<a<<" ";} }; int main(){ Derived d(10); // 编译错误:没有与此调用匹配的函数 return 0; }
#include<iostream> using namespace std; class Base{ public: Base(){ cout<<"Base class constructor called "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived class constructor called "; } Derived(int a){ cout<<"Derived class constructor with value : "<<a<<" called "; } }; int main(){ Derived d; return 0; }
출력 결과는 다음과 같습니다.
Base class constructor called Derived class constructor called
위 코드에서 Derived 클래스의 생성자는 Base 클래스의 생성자를 호출하므로 "Base class constructor selected"가 출력되지만 Derived 클래스에는 생성자는 하나뿐이므로 기본적으로 매개변수 없는 생성자가 호출되므로 "파생 클래스 생성자 호출"도 출력됩니다. 기본 클래스 생성자를 두 번 호출하면 오류가 발생합니다.
#include<iostream> using namespace std; class Base{ public: Base(){ cout<<"Base class constructor called "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived class constructor called "; } Derived(int a){ cout<<"Derived class constructor with value : "<<a<<" called "; } }; int main(){ Derived d(10); return 0; }
출력은 다음과 같습니다.
Base class constructor called Derived class constructor with value : 10 called Base class constructor called
Derived 클래스의 생성자에서 기본 클래스의 생성자가 두 번 호출되므로 두 번 출력됩니다. "기본 클래스 "라고 불리는 생성자. 이는 C++에서 파생 클래스 개체의 생성 프로세스가 먼저 기본 클래스 생성자를 호출한 다음 파생 클래스 생성자를 호출하기 때문입니다. 따라서 파생 클래스 생성자에서 기본 클래스 생성자를 두 번 호출하면 기본 클래스 생성자가 두 번 호출되어 오류가 발생합니다.
#include<iostream> using namespace std; class Base{ public: Base(){ f(); } virtual void f(){ cout<<"Base "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived "; } void f(){ cout<<"Derived "; } }; int main(){ Derived d; return 0; }
출력 결과는 다음과 같습니다.
Derived
위 프로그램에서 기본 클래스 생성자의 f() 함수는 가상 함수이며 파생 객체가 생성되면 파생 클래스의 생성자가 먼저 생성자를 호출합니다. 기본 클래스의 f() 함수가 호출됩니다. 그러나 기본 클래스 생성자에서 f()가 호출되면 파생 클래스 객체의 생성자가 아직 실행되지 않았으므로 파생 클래스의 f() 함수는 아직 호출되지 않았으며, 파생 클래스의 f() 함수만 호출됩니다. 기본 클래스가 호출되었습니다. 따라서 출력은 "파생"이 아닌 "기본"입니다.
2. 기본 클래스 생성자의 잘못된 호출을 처리하는 방법은 무엇입니까?
기본 클래스 생성자가 잘못 호출되는 상황이 발생하는 경우 어떻게 처리해야 하나요? 다음은 잘못된 기본 클래스 생성자 호출을 처리하는 여러 가지 방법입니다.
즉, 기본 클래스 생성자에 대한 잘못된 호출이 발생하면 당황하지 말고 오류를 주의 깊게 확인하고 위의 처리 방법에 따라 처리해야 합니다. 이러한 방식으로 기본 클래스 생성자에 대한 잘못된 호출로 인해 발생하는 프로그램 실행 오류를 효과적으로 방지할 수 있습니다.
위 내용은 C++ 구문 오류: 기본 클래스 생성자 호출이 올바르지 않습니다. 어떻게 처리해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!