본문 바로가기

Programming/C/C++

C++/객체 포인터

반응형

객체 포인터


C언어에서 포인터 선언과 동일하게 객체에 대한 포인터 변수를 선언하고 이 포인터 변수를 통해 객체의 멤버 변수를 읽고 값을 쓰거나 멤버 함수를 호출할 수 있다.


객체 포인터 선언

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Circle {
private:
    int radius;
public:
    Circle();
    Circle(int r);
    double getArea();
 
};
 
Circle donut;
double d = donut.getArea();
 
Circle *p;
= &donut;
= p->getArea();
cs


객체 주소 지정 방법

1
2
3
1. p = &donut;
2. Circle* p = &conut;
 
cs


객체 멤버 접근 방법

1
2
3
1. d = donut.getArea();
2. d = p->getArea();
3. d = (*p).getArea();
cs


여기서 초기화 되지 않은 객체 포인터를 이용하면 null pointer assignment 오류가 발생한다.

아래는 오류가 발생하는 코드 이다.


1
2
Circle *p;
p->getArea();
cs


객체 포인터 선언 및 활용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
using namespace std;
 
class Circle {
private:
    int radius;
public:
    Circle() {
        radius = 1;
    }
    Circle(int r) {
        radius = r;
    }
    double getArea();
};
 
double Circle::getArea() {
    return 3.14*radius*radius;
}
 
int main() {
    Circle donut;
    Circle pizza(30);
    
 
    // 객체 이름으로 멤버 접근
    cout << donut.getArea() << endl;
 
    // 객체 포인터로 멤버 접근
    Circle *p;
    p = &donut;
    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;
 
    p = &pizza;
    cout << p->getArea() << endl;
    cout << (*p).getArea() << endl;
 
    return 0;
}
cs


실행 결과

반응형

'Programming > C/C++' 카테고리의 다른 글

C++/CPPRESTSDK_VisualStudio에 설치 및 라이브러리 관리  (0) 2017.10.25
C++/객체 배열  (0) 2017.10.23
C++/헤더 파일과 cpp 파일로 분리 예시  (0) 2017.10.23
C++/C++ 프로그램 작성법  (0) 2017.10.23
C++/C++ 구조체  (0) 2017.10.23