실습 1 객체지향언어의 3가지 특성(캡슐화, 다형성, 상속화)
polymorphism(다형성)에 대한 예시
다향성의 종류
코어션 - > 자동형 변환이라고 생각하면 됨.
실습 2 Function Overloading (함수 중첩)
함수 중첩에 대한 예시
#include <iostream>
using std::cout;
using std::endl;
int add(int i, int j)
{
return (i + j);
}
double add(double i, double j)
{
return (i + j);
}
int main()
{
cout << add(10, 20) << endl;
cout << add(10.5, 20.3) << endl;
return 0;
}
#include <iostream>
using std::cout;
using std::endl;
int add(int i, int j)
{
return (i + j);
}
double add(int i, int j)
{
return ((double)i + (double)j);
}
double add(double i, double j)
{
return (i + j);
}
int main()
{
cout << add(10, 20) << endl;
cout << add(10.5, 20.3) << endl;
return 0;
}
매개변수가 똑같기 때문에 함수 오버로딩 하는것이 안된다.
#include <iostream>
using std::cout;
using std::endl;
int Max(int i, int j)
{
return i > j ? i : j;
}
double Max(double i, double j)
{
return i > j ? i : j;
}
char Max(char i, char j)
{
return i > j ? i : j;
}
int main()
{
std::cout << Max(1, 2) << std::endl;
std::cout << Max(7.5, 3.6) << std::endl;
std::cout << Max('A', 'B');
return 0;
}
Template를 이용한 위에 코드보다 요약해서 만든 고급방법
#include <iostream>
using std::cout;
using std::endl;
template <class T>
T Max(T i, T j)
{
return i > j ? i : j;
}
int main()
{
std::cout << Max(1, 2) << std::endl;
std::cout << Max(7.5, 3.6) << std::endl;
std::cout << Max('A', 'B');
return 0;
}
함수 중첩을 하는 2가지 경우
#include <iostream>
int add(int i, int 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, 2, 3) << std::endl;
std::cout << add(1, 2, 3, 4) << std::endl;
return 0;
}
매개 변수 개수가 다른경우.
#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 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;
return 0;
}
매개 변수의 형이 다른 경우
실습 3 생성자 중첩 (중요 시험에 나옴)
생성자 중첩에 대한 예
#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(5), meri;
std::cout << happy.getAge() << "," << meri.getAge();
return 0;
}
생성자 함수는 중첩시키는 것은 객체에 초기값을 다양하게 주는 선택 기회를 제공하는 것이다.
실습 4 디폴트 인자(매개변수 Default Parameter)
디폴트 인자에 대한 예시
# 디폴트 인자를 정의하기 시작하면 디폴트 인자 값을 계속해서 넣어줘야 한다.
# i와 j값중에 j의 값을 안넣고 싶으면 i와 j의 위치를 바꿔야 한다.
#include <iostream>
int add(int i = 1, int j = 1);//선언하는 곳에 디폴트 값을 정하면됨.
int main()
{
std::cout << add() << ","; // 실매개변수 없음, 3
std::cout << add(10) << ","; // 실매개변수 한 개, 12
std::cout << add(10, 20); // 실매개변수 두개, 30
return 0;
}
int add(int i, int j) // 형식매개변수 정의 부분에는 디폴트 값을 안정해야됨.
{//정의 하게되면 오류가 생김.
return(i + j);
}
디폴트 인자 예시
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a = 1) { 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 meri, happy(5);
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
위에 소스에서 함수 중첩이나, 디폴트 인자를 한 가지 방법으로만 사용해야하고 함수중첩과 디폴트 인자를 같이 쓰면 오류가 생김.
디폴트 인자 응용
#include <iostream>
int Gop(int i, int j, int k = 1, int l = 1)
{
return(i * j * k * l);
}
int main()
{
std::cout << Gop(1, 2) << std::endl; // 1*2*1*1
std::cout << Gop(1, 2, 3) << std::endl; // 1*2*3*1
std::cout << Gop(1, 2, 3, 4) << std::endl;// 1*2*3*4
return 0;
}
디폴트 인자 응용( 함수 외부로 빼서하는 소스코드)
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a=1);
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog()
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
Dog::Dog(int a=1) { age = a; }
int main()
{
Dog meri, happy(5);
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
디폴트 인자값을 정의 부분에서는 넣지 않고 선언부에만 넣어야 한다 위에 코드는 오류가 나는 코드이고,
아래 소스코드가 고친 소스코드임.
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a=1);
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog()
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
Dog::Dog(int a) { age = a; }
int main()
{
Dog meri, happy(5);
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
'C++' 카테고리의 다른 글
C++ 프로그래밍 13주차 (0) | 2023.11.30 |
---|---|
C++프로그래밍 12주차 (0) | 2023.11.23 |
C++ 10주차 (1) | 2023.11.09 |
C++ 8주차 (0) | 2023.11.02 |
C++7주차 (0) | 2023.10.19 |