자동형변환 == 코어션?
불규칙 == Ad hoc
같은 이름을 사용할 수 있는게 왜 장점이지?
기능이 똑같은데 이름은 다 달라서 개발자입장에서는 불편해서 일것같다?
불편보단 더 편해서 인것같다. 내 생각엔. 아마도???
▲△▲△ 아주 잘되는 모습 엄청 편하다!!! ▲△▲△
( 컴파일러가 매개변수의 자료형을 보고 오류가 나지않도록 알맞은 함수로 보내준다 )
int add(int i, int j)
{
return (i + j);
}
double add(int i, int j)
{
return ((double)i + (double)j);
}
이렇게 매개변수의 자료형과 이름이 같은 함수(추가로 매개변수의 갯수까지 같으면!)가 두개인 상태에서 함수 오버로딩을 사용할려하면 컴파일러에서 오류가 난다.
즉 리턴값, 함수의 내용 제외 같은 함수가 두개면 오류가 난다는 것!!
이건 추가 내용이긴한데 template를 사용해서 임의의 클래스(?)를 지정해서 코드를 간결하게 사용할 수 있다. 코드가 아주 이쁘다.
#include <iostream>
class Dog {
private:
int age;
public:
Dog() { age = 1; } // 매개변수가 없는 생성자, 자동 inline
Dog(int a) { age = a; } // 매개변수가 하나인 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog()
{
std::cout << "소멸";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog happy, meri;
std::cout << happy.getAge() << "," << meri.getAge();
return 0;
}
예시 자료 ( 이것도 함수 오버로딩이다 )
이제 위의 예시 코드처럼 실매개변수가 없을 경우에 디폴트값이 출력될 수 있게 한 코드이다.
디폴트값은 매개변수 = 디폴트값 이렇게 입력해놓는 듯
주의할 점은 위에 적혀있는대로 디폴트 매개변수를 정의하기 시작하면 그 다음의 매개변수들도 모두 디폴트 매개변수를 가져야하기에 특정 매개변수만 디폴트 값을 지정해놓고 싶으면 디폴트값을 지정하지 않을 매개변수를 왼쪽으로 모아놓아야한다!!!
아 그리고 정의 , 선언으로 할때 위의 수업 자료에 나온 것 처럼 선언 부분에만 디폴트값을 지정해놓는다. 정의부분에는 X
중복이기때문에 위의 소스를 추가할꺼면 디폴트 인자, 함수 중첩 둘중에 하나만 사용해야한다.
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a);
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::Dog(int a = 1) { age = a; }
근데 이부분에서는 선언 부분말고 정의 부분에 디폴트 인자를 넣어줘야할듯. 아마도???
아니 둘 다 되는데???
C++의 여러 기능들을 이용하면 코드도 축약되고 보기도 쉽고 수정도 쉽게 코드를 짤 수 있을꺼같아서 좋다. 아주 좋다