C++ 기초 (8)

임철현·2023년 11월 16일
0
post-thumbnail

1. 객체지향언어의 특징

2. 다향성

업로드중..

자동형변환 == 코어션?

불규칙 == Ad hoc

3. 함수 오버로딩

업로드중..

같은 이름을 사용할 수 있는게 왜 장점이지?

업로드중..

기능이 똑같은데 이름은 다 달라서 개발자입장에서는 불편해서 일것같다?
불편보단 더 편해서 인것같다. 내 생각엔. 아마도???

업로드중..

▲△▲△ 아주 잘되는 모습 엄청 편하다!!! ▲△▲△
( 컴파일러가 매개변수의 자료형을 보고 오류가 나지않도록 알맞은 함수로 보내준다 )

대신 ▽

int add(int i, int j)
{
	return (i + j);
}
double add(int i, int j)
{
	return ((double)i + (double)j);
}

이렇게 매개변수의 자료형과 이름이 같은 함수(추가로 매개변수의 갯수까지 같으면!)가 두개인 상태에서 함수 오버로딩을 사용할려하면 컴파일러에서 오류가 난다.

즉 리턴값, 함수의 내용 제외 같은 함수가 두개면 오류가 난다는 것!!

업로드중..

이건 추가 내용이긴한데 template를 사용해서 임의의 클래스(?)를 지정해서 코드를 간결하게 사용할 수 있다. 코드가 아주 이쁘다.

4. 생산자 중첩

업로드중..

#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;
}

예시 자료 ( 이것도 함수 오버로딩이다 )

5. 디폴트 인자 매개변수

업로드중..

업로드중..

업로드중..

이제 위의 예시 코드처럼 실매개변수가 없을 경우에 디폴트값이 출력될 수 있게 한 코드이다.
디폴트값은 매개변수 = 디폴트값 이렇게 입력해놓는 듯

주의할 점은 위에 적혀있는대로 디폴트 매개변수를 정의하기 시작하면 그 다음의 매개변수들도 모두 디폴트 매개변수를 가져야하기에 특정 매개변수만 디폴트 값을 지정해놓고 싶으면 디폴트값을 지정하지 않을 매개변수를 왼쪽으로 모아놓아야한다!!!

업로드중..

아 그리고 정의 , 선언으로 할때 위의 수업 자료에 나온 것 처럼 선언 부분에만 디폴트값을 지정해놓는다. 정의부분에는 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; }

근데 이부분에서는 선언 부분말고 정의 부분에 디폴트 인자를 넣어줘야할듯. 아마도???
아니 둘 다 되는데???

6. 마무리

C++의 여러 기능들을 이용하면 코드도 축약되고 보기도 쉽고 수정도 쉽게 코드를 짤 수 있을꺼같아서 좋다. 아주 좋다

profile
임철현입니다

0개의 댓글