2022. 12. 23. 23:19ㆍC++
1. 함수의 중첩(overloading)
C와 달리 C++에서는 함수명이 같아도 매개변수의 개수나 자료형이 다르면 컴파일러가 구분한다.
1.1. 함수의 중첩 예 – 매개변수의 자료형이 다른 경우
#include <iostream>
int add(int i, int j)
{
return (i + j);
}
double add(double i, double j)
{
return (i + j);
}//C++ function overloading
int main()
{
std::cout << add(10, 20) << std::endl;//매개변수가 int형이므로 상단의 add() 호출
std::cout << add(10.5, 20.3) << std::endl;//매개변수가 double형이므로 하단의 add() 호출
}
1.2. 함수의 중첩 예 – 매개변수의 형이나 개수가 다른 경우
#include <iostream>
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);
}
int add(int i, int j, int k)
{
return (i + j + k);
}
int add(int i, int j, int k, int l)
{
return (i + j + k + l);
}
int main()
{
std::cout << add(1, 2) << std::endl;
std::cout << add(1.3f, 2.6f) << std::endl;
std::cout << add(6.5, 3.8) << std::endl;
std::cout << add(1, 2, 3) << std::endl;
std::cout << add(1, 2, 3, 4) << std::endl;
return 0;
}
2. 생성자 중첩
- 클래스의 멤버함수와 생성자는 중첩이 가능하나, 소멸자는 매개변수가 없기 때문에 할 수 없다.
생성자 함수를 중첩시켜 객체의 초기값을 다양하게 줄 수 있다.
- 생성자 중첩 예 – 매개변수가 없는 생성자 호출과 하나인 생성자를 배열로 호출
#include <iostream>
using std::cout;
using std::endl;
class Dog {
private:
int age;
public:
Dog() { age = 1; }
// 매개변수가 없는 생성자
Dog(int a) { age = a; }
// 매개변수가 하나인 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog() //소멸자
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog happy[5];//매개변수가 없는 생성자
Dog meri[5] = { 1,2,3,4,5 };//매개변수가 있는 생성자
for (int i = 0; i < 5; i++)
std::cout << happy[i].getAge() <<
"," << meri[i].getAge() << std::endl;
return 0;
}
3. 디폴트 인자(default parameter/argument)
- 함수 선언 시 형식매개변수에 미리 임의의 값을 집어넣을 때, 그 값을 디폴트 인자라 한다.
- 선언에서 디폴트 인자를 넣었더라도 함수의 정의 시에는 넣지 않는다.
- 디폴트 인자를 사용한 함수는 매개변수에 값을 집어넣지 않으면 디폴트 인자의 값을 넣는다.
- 매개변수가 여러 개일 때, 앞쪽의 매개변수를 디폴트 인자로 선언했을 경우 나머지 매개변수도 디폴트 인자를 집어넣어야 한다.
#include <iostream>
int add(int i = 1, int j = 3);//선언부에만 디폴트 인자를 넣는다
int main()
{
std::cout << add() << ",";// 실매개변수 없음, 4
std::cout << add(10) << ",";// 실매개변수 한 개, 12
std::cout << add(10, 20);// 실매개변수 두 개, 30
return 0;
}
int add(int i, int j)
{
return(i + j);
}
3.1. 디폴트 매개변수를 활용한 생성자
디폴트 인자를 사용한 생성자를 사용했을 경우 또 다른 생성자를 중첩해서 사용할 수 없다.
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a = 1);//디폴트 매개변수를 갖는 생성자
int getAge();
void setAge(int a);
};
Dog::Dog(int a) {
age = a;
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog meri, happy(5);//디폴트 매개변수를 사용한 meri와 사용하지 않은 happy
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
3.2. 디폴트 인자 응용
네 개의 값을 받아 모두 곱하는 함수 multiply()에는 매개변수 k와 ㅣ에 1을 주어 매개변수를 두 개만 받더라도 받은 값만 곱해주는 효과가 있다.
마찬가지로 add() 함수에도 디폴트 인자 0을 넣어 매개변수의 개수가 두 개만 넘는다면 받은 값만 더해준다.
#include <iostream>
int multiply(int i, int j, int k = 1, int l = 1)
{
return(i * j * k * l);
}
int add(int i, int j, int k = 0, int l = 0)
{
return(i + j + k + l);
}
int main()
{
std::cout << multiply(1, 2) << std::endl; // 1*2*1*1
std::cout << multiply(1, 2, 3) << std::endl; // 1*2*3*1
std::cout << multiply(1, 2, 3, 4) << std::endl;// 1*2*3*4
std::cout << add(1, 2) << std::endl;
std::cout << add(1, 2, 3) << std::endl;
std::cout << add(1, 2, 3, 4) << std::endl;
return 0;
}
출처 : https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA/playlists, C++ 프로그래밍 강의 - 한성현 교수님
'C++' 카테고리의 다른 글
C++ 프로그래밍 13주차 정리 (0) | 2022.12.26 |
---|---|
C++ 프로그래밍 12주차 정리 (0) | 2022.12.25 |
C++ 프로그래밍 10주차 정리 (0) | 2022.12.22 |
C++ 프로그래밍 7-9주차 정리 (0) | 2022.11.21 |
C++ 프로그래밍 6주차 정리 (0) | 2022.11.16 |