영넌 개발로그

[C++ 기초] 객체 참조 / 객체 참조 포인터 / this 포인터 / SLL 구현 본문

코딩/C++

[C++ 기초] 객체 참조 / 객체 참조 포인터 / this 포인터 / SLL 구현

영넌 2020. 10. 26. 06:02

 

* this ?

객체를 만들었을 때 기본적으로 그 객체를 가르키는 포인터는 this 이다.

클래스 내부에서만 사용되고, 자기자신을 가르킨다.

 

SLL 구현

- Node를 SLL에 붙이는 코드를 Node가 갖도록 한다. (자기 스스로 붙이기)

 

1. class를 node

#include <iostream>

using namespace std;

class Node {
public:
	int n;
	Node* next;

	Node(int v) : n(v), next(0)
	{
	}

	void addToSLL(Node *& _head) {
		if (_head == 0) {
			_head = this;
		}
		else {
			Node* temp = _head;
			while (temp->next != 0) {
				temp = temp->next;
			}
			temp->next = this;
		}
	}

	void showN() {
		cout << "n is: " << n << endl;
	}
};

Node* head = 0;



int main()
{
	Node a(77);
	Node b(88);

	Node*& r_head = head;
	a.addToSLL(r_head);	//r_head가 가르키는 sll에 가서 붙어
	b.addToSLL(r_head);

	head->showN();
	head->next->showN();
	return 0;
}

 

 

2. class를 SLL

#include <iostream>

using namespace std;

class Node {
public:
	int n;
	Node* next;

	Node(int v) : n(v), next(0)
	{
	}

	void addToSLL(Node *& _head) {
		if (_head == 0) {
			_head = this;
		}
		else {
			Node* temp = _head;
			while (temp->next != 0) {
				temp = temp->next;
			}
			temp->next = this;
		}
	}

	void showN() {
		cout << "n is: " << n << endl;
	}
};

Node* head = 0;


class My_SLL {
public:
	Node* head;
	Node* last;
	int cnt;		 //SLL이 데이터가 몇개인지

	//Constructor
	My_SLL() : head(0), last(0), cnt(0) {}

	void addNode(Node* _new_one)
	{
		if (head == 0) {
			head = _new_one;
			last = _new_one;
			cnt = 1;
		}
		else {
			last->next = _new_one;
			last = _new_one;
			cnt += 1;
		}
	}

	//SLL에 들어있는 모든 node들을 보여주는 함수
	void showALL() {
		Node* temp = head;
		if (cnt == 0) {
			cout << "NO NODE" << endl;
			return;
		}
		while (temp != 0) {
			cout << temp->n << endl;
			temp = temp->next;
		}
	}

};

int main()
{
	Node* a = new Node(777);
	Node* b = new Node(888);

	My_SLL my_sll;

	my_sll.addNode(a);
	my_sll.addNode(b);

	my_sll.showALL();

	Node* c = new Node(999);
	Node*& r_head = my_sll.head;
	c->addToSLL(r_head);

	my_sll.showALL();

	return 0;
}

 

Comments