091

[C/C++] 함수중첩(멤버함수,생성자), 디폴트 인자(매개변수) 본문

Programming Language/C&C++

[C/C++] 함수중첩(멤버함수,생성자), 디폴트 인자(매개변수)

공구일 2024. 12. 15. 18:43
728x90

01. 함수중첩(function overloading)

- 함수 오버로딩 : 다형성을 제공하는 C++에서는 하나의 함수 이름을 중첩해서 사용 -> 하나의 함수명으로 여러 개의 유사 목적으로 사용

-> 매개변수의 자료형이나 개수가 다른경우에 사용하는데 만약에 리턴값자료형만 다른경우에는 중첩이 불가능함

int add(int i, int j) return (i+j);
float add(float i, float j) return (i+j);
double add(double i, double j) return (i+j);
//double add(int i, int j) return (i+j); 반환값자료형만 다른 경우에는 오류남

- 컴파일러가 자동으로 매개변수의 입력 자료형에 따라 해당하는 함수를 연결해줌

class Dog{
private:
	int age;
public:
	Dog() {age=1;}
	// 매개변수가 없는 생성자
	Dog(int a){age=a;}
	// 매개변수가 하나인 생성자
	~Dog();
	int getAge();
	void setAge(int a);
};

 - 생성자 중첩 : 생성자 함수의 경우 소멸자와 다르게 매개변수를 가질 수 있기 때문에 매개변수의 수나 자료형에 따라 여러 개의 생성자 함수를 중첩할 수 있음 -> 초기값을 다양하게 선택 기회를 제공하는 것

 

02. 디폴트인자(Default Parameter)

- 별도의 매개변수를 전달하지 않아도 기본적인 값을 전달하도록 함수 원형을 선언할 때 디폴트 값을 지정할 수 있음 -> 함수 중첩의 축약형으로, main()함수 전에 함수 선언을 하면 선언부에만 디폴트 인자를 지정해야하며, 디폴트 매개변수를 정의하기 시작하면 그 오른쪽에 나오는 매개변수들은 모두 디폴트 매개변수를 가져야함

#include <iostream>
class Dog {
private:
	int age;
	std::string name;
public:
	// Dog() { age = 1; name = "강아지"; }  생성자(함수) 중첩
	Dog(int age = 1, std::string name = "강아지");
	~Dog();
	int getAge() const;
	void setAge(int age);
	std::string getName() const;
	void setName(std::string name);
};
Dog::Dog(int age, std::string name) { this->age = age; this->name = name;}
//선언과 정의가 따로 존재할 때 디폴트 인자는 선언에만 작성해주기!
Dog::~Dog() { std::cout << "bye~\n"; }
int Dog::getAge() const { return age; }
void Dog::setAge(int age) { this->age = age; }
std::string Dog::getName() const { return name; }
void Dog::setName(std::string name) { this->name = name; }
int main()
{
	Dog coco, happy(3,"돌이");
	//coco.setAge(1);
	std::cout << coco.getAge() << coco.getName() << std::endl;//1강아지
	std::cout << happy.getAge() << happy.getName() << std::endl;//3돌이
	return 0;
}

- 아무런 인자를 보내지 않는 생성자 멤버함수가 없지만 생성된 coco는 디폴트 인자값이 되어 1과 3이 자동으로 멤버변수에 들어감

Dog(int a=1){age=a;}
/* 디폴트 매개변수를 갖는 생성자
Dog() {age=1;}
Dog(int a){age=a;}
맨 윗줄 생성자는 디폴트 매개변수를 사용하여 Dog()와 Dog(int) 두 가지 역할을 동시 수행하므로
아래 두개의 코드를 작성 시 어떤 생성자를 선택해야하는지 모호해져 오류가 발생함
*/

- 디폴트 인자는 함수 호출 시 일부 인자를 생략할 수 있어 함수 중첩과 비슷한 역할을 함

728x90

'Programming Language > C&C++' 카테고리의 다른 글

[C/C++] 템플릿, STL  (2) 2024.12.16
[C/C++] 오버라이딩:가상함수  (1) 2024.12.16
[C/C++] 상속  (3) 2024.12.15
[C/C++] const, 동적 메모리할당(new, delete)  (2) 2024.12.15
[C/C++] 배열, 포인터, 생성자&소멸자  (1) 2024.12.15