-
[C++] default parameterC++ 2023. 4. 19. 21:52
C++에서는 함수나 생성자의 매개변수에 일부분에 default 값으로 지정가능함
정의할 시에는
반드시 오른쪽부터 채워야함
무조건 오른쪽 정렬void func(int a=0, int b=0); void func2(int a, int b=5, int c=3, int d=10); void func3(int a=4, int b, int c=5); // error void func4(int a=10, int b=20, int c); // error함수 호출 시 인자값은 왼쪽부터 채워짐
여기서 생성자에 디폴트 매개변수를 도입하는게 진짜 개 골때리는 부분이다
이게 생성자에 디폴트 매개변수를 도입하면
한 개의 생성자가 커버칠 수 있는 다른 생성자들이 생긴다
예를 들어class Point { private: int x, y; public: Point(int x = 10, int y = 10) { this->x = x; this->y = y; } void print() { cout << "x: " << x << " " << "y: " << y << endl; } };
이렇게 Point 클래스에 매개변수 있는 생성자를 정의해놓으면
이 생성자는
Point(); Point(int x); Point(int x,int y);
이 세 개를 다 커버칠 수 있다
그래서 우리가 저 세 개를 정의 안해놔도 된다
정의해 놓으면 중복정의가 뜬다
그리고 이렇게 디폴트 매개변수 생성자로 커버칠 수 있는 생성자를 또 하나 선언하면 에러뜬다
Point(int x) { this->x = x; this->y = 0; } Point(int x = 10, int y = 10) { this->x = x; this->y = y; }
이게 빨간줄이 그어지는건 아닌데
나중가서 compile할때
만약 Point(5) 이런 놈이 호출되면 둘 중 누굴 불러야할지 모르기 때문에 에러남 ㅇㅇ
그래서 이런 형태도 가능하다
#include <iostream> using namespace std; class A { private: int x; public: A(int x=20) { this->x = x; } void print() { cout << x; } }; class B : public A { private: int y; public: /* B() : A() { // empty } */ B(int x = 10, int y = 10) : A(x) { this->y = y; } void print() { A::print(); cout << y; } }; int main() { B b1; // B b1(); B b2(1); b1.print(); b2.print(); return 0; }
여기서 저 주석부분 해제하면 중복으로 에러남'C++' 카테고리의 다른 글
[C++] 반환형 참조형 (return값이 참조형일때) (0) 2023.04.15 [C++] MyString 클래스 실습 (0) 2023.04.13 [C++] const (1) 2023.04.12 [C++] 접근지정자 (access modifiers) (3) 2023.04.11 [C++] friend (2) 2023.04.11