포인터란 무엇인가?
동적 배열은 무엇인가? ~~
~~상속은 무엇인가?
동형은 무엇인가?
가상 함수는 무엇인가?
NameSpace는 무엇인가?
분할 컴파일이란 무엇인가?
STL은 무엇인가?
많이들 어려워 하는 내용이다.
double *p;
p는 더블에 대한 포인터 변수이다.
포인터는 이런식으로 가리킨다. 포인터가 가지는 값은 주소이다.
int v1 = 5;
int *p1;
p1 = &v1;
다음과 같이 쓴다. 값을 참조하기 위해서는 *p로 사용한다.
포인터를 사용하면 함수에서 값에 대해 접근할 수 있기 된다.
포인터끼리 산술적인 연산도 된다. 2차원 배열에서 조금 헷갈릴 수 있으니 보자.
int a[5][5];
// *a[1] 은 2번째 열 1번째 원소
// *a[1] + 2 는 2열 3번째 원소
// *a는 a[0][0]
// **a 는 a[0][0]의 값
위에서 한 내용의 심화내용이다.
int *p;
p1 = new int;
이름 없는 변수를 만들었다.
여기에 값을 조금 부여해주면 다음과 같이 써준다.
*p = 42;
그러면 p가 42를 가리킨다.
클래스에 대해서도 쓸 수 있다.
Myclass *mcPtr;
mcPtr = new MyClass(32.0, 17);
지울 수도 있다.
delete p;
p = NULL;
이것들을 이용해 동적인 배열을 만들 수 있다.
double* d;
d = new double[10];
//code
delete [] d;
다음과 같이 포인터를 사용해서 동적인 배열을 만들었다.
추가적으로 화살표 연산자가 있다.
MyClass *p;
p = new MyClass;
p->grade = "A";
// same to (*p).grage = "A";
this라는 것도 있다.
cout << stuff;
cout << this -> stuff;
https://blog.hexabrain.net/173
상속은 다음과 같이 해준다.
class Bird{
};
class Chicken : public Bird {
};
동형은 오버로딩일 동형의 예시이다.
class Person{
public:
virtual void speak(){
cout << "Person \n";
}
};
class student : public Person{
public:
virtual void speak() {
cout <<"Student \n";
}
}
이렇게 써야 부모 클래스것이 호출되지 않는다.