C++ 프로그래밍 11주차 정리

2022. 12. 23. 23:19C++

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