멤버 함수 호출멤버 함수 호출은 포인터 선언에 어떤 클래스의 멤버 함수를 가리킬건지 클래스이름을 지정해줘야 합니다.Ex) 시그니처가 void Point::Print(int n)인 멤버 함수 포인터 선언void(Point::*pf)(int) 로 pf 멤버 포인터 선언- * 객체로 멤버 함수 호출 시에는 .* 연산자를 이용한다. 예를 들어 (객체.*pf)(10) 처럼 사용- * 주소로 멤버 함수 호출 시에는 -> * 연산자를 이용한다. 예를 들어 (주소->*pf)(10) 처럼 사용 코드#include using namespace std;class Point { int x; int y;public: explicit Point(int _x = 0, int _y = 0) : x(_x), y(_y) {} void ..
정적 함수 호출함수 시그니처(반환과 매개변수 일치)를 맞춰주기만 하면 쉽게 선언 할 수 있다. 코드#include using namespace std;void Print(int n) { cout Main 외에 있는 코드들에 보이는 함수들은 반환이 void이고 매개변수를 int형 하나를 받고있기에함수 포인터의 시그니처를 이와 같이 맞춰줘야 합니다.그렇기에 void (*pf) (int)로 똑같이 맞춰줍니다. 결과
함수 포인터함수의 시작 주소를 저장하는 포인터주로 변수를 저장할때 포인터를 써왔지만 함수도 스택에 주소가 저장되기 때문에 포인터를 통해 참조가능. 함수의 시작 주소를 저장하는 포인터로 함수 시그니처(함수의 반환 타입과 매개변수 리스트)와 같게 선언. #include using namespace std;void Print(int n) { cout void(*pf)(int)void : 반환값이 없다.(*pf): 함수 포인터(int): 매개변수를 int형으로 받는다.Print 전역변수를 pf에 할당해주기 위해서는 함수포인터의 반환값과 매개변수 즉 시그니처를 맞춰줘야함. 결과
1. 다음 이항 연산자 +가 호출하는 오버로딩 함수 두 개를 고르세요.Point p1, p2;p1+p2;operator+(p2,p1);p1.operator+(p2);operator+(p1,p2);p2.operator(p1);답: 2,31번이 안되는 이유: 매개변수의 순서가 p2가 먼저오기 때문에 p2+p1에 대해서 가능하므로 X4번 역시 this인 자기자신이 p2기 때문에 불가능 2. 다음 세 인자를 받는 () 연산자 오버로딩 함수 선언으로 맞는 것은?func(10, 20, 30);void operator()(void);void operator()(int);void operator()(int, int);void operator()(int,int,int);답: 4이유: 오버로딩은 함수이름이 같지만 전달받는..
클래스 타입 변환 연산자타입 변환 연산자 오버로딩을 통해 자기 자신의 타입을 다른 타입으로 변환소스코드#include using namespace std;class Point { int x; int y;public: explicit Point(int _x = 0, int _y = 0) : x(_x), y(_y) {} void Print() const { cout 코드 내용Point형 pt를 생성자 매개변수 2,3을 전달하여 생성.int형 n에 pt를 넣으면 타입변환 오버로딩 함수가 호출되어 this.pt의 x값만 반환되며 n에 들어가게됨.그 결과 n에는 pt의 2값이 들어갈 수 있어 결과적으로 2가 출력.실행 결과
타입 변환 연산자 오버로딩클래스에 각기 다른 타입으로 생성자를 오버로딩 하는 방식소스코드#include using namespace std;class A {};class B {public: /*B() { cout 코드 내용A 클래스 타입 a, int형 n, double형 d를 그리고 B클래스타입 b 총 4개를 미리 정의b에 각각 a, n, d에 대한 생성자로 할당해줌.B클래스에 있는 오버로딩된 생성자들을 통해 특정 타입을 인자로 받는 생성자 호출을 통한 타입 변환(객체 생성 후 대입)이 가능해짐!실행 결과
스마트 포인터C++에서 동적 메모리 할당과 누수를 관리하는 도구소스코드#include using namespace std;class Point { int x; int y;public: Point(int _x = 0, int _y = 0) : x(_x), y(_y) {} void print() const { cout () const { return ptr; } Point& operator*() const { return *ptr; }};void main() { Point* p1 = new Point(2, 3); //PointPtr은 스택 메모리에, Point는 힙 메모리에 적재됨! PointPtr p2 = new Point(5, 5); p1->print(); //p1->print() 호출 (*p1)...
클래스에 배열 인덱스를 적용시키게 하는 연산자 소스코드#include using namespace std;class Array { int* arr; int size; int capacity;public: //기본 생성자 cap매개변수 100을 받고 capacity를 100으로 초기화하여 arr크기를 100칸 할당하여 arr에 넣는다. Array(int cap = 100) : arr(0), size(0), capacity(cap) { arr = new int[capacity]; //arr[100] } ~Array() { delete[] arr; //동적 할당 해제 } void Add(int data) { if (size 코드내용1. Main함수에서 Array클래스 ar을 매개변수 10을 전달하여 10..
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.