일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- suffix return type
- 더 지니어스 양면포커
- std::endl
- constructor
- discord bot
- virtual destructor
- std::vector
- operator overloading
- member function pointer
- base from member
- c++ multi chatting room
- dynamic_cast
- std::cout
- virtual function table
- new&delete
- placement new
- this call
- increment operator
- C++
- delete function
- vector size
- pointer to member data
- conversion constructor
- virtual function
- std::ostream
- virtual inheritance
- vector capacity
- return by reference
- diamond inheritance
- c++ basic practice
- Today
- Total
목록2024/08 (43)
I'm FanJae.
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. UpCasting#include class Animal{ std::string name; int age;public: void cry() { }};class Dog : public Animal{ int color;public: void setColor(int c) { color = c; }};int main(){ Dog dog; Dog* p1 = &dog; // ok // int* p2 = &dog; // Error Animal* p3 = &dog;}- UpCasting이란, 기반 클래스 포인터로 파생 클래스 객체를 가리키는 행위를 의미한다.- 메모리 레이아웃 차원에서 보면, 파생 클래스(Derived Class)인..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. Inhertance#include class Student{ std::string name; int age; int id;};class Professor{ std::string name; int age; int major;};int main(){ Student s; Professor p;}- 학사 관리 프로그램을 만들고 있는 상태에서, Student, Professor 등 필요한 클래스를 설계중이다.- 여기서 Student, Professor 등이 가지는 공통된 속성(name,age)이 있다.- 이를 매번 적어주기 보단 공통된 것으로 묶어지면 훨씬 더 관리가 용이하다. cla..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. Copy Constructor- 자신과 동일한 타입 한개를 인자로 가지는 생성자class Point{ int x; int y;public: Point() : x{0}, y{0} {} // 1 Point(int a, int b) : x{a}, y{b} {} // 2};int main(){ Point p1; // ok. Point p2(1,2); // ok// Point p3(1); // error. Point(int) 필요 Point p4(p2); // ok. Point(Point)}- Point p4(p2);와 같은 생성자는 만든적이 없음에도 이상없이 잘 작동한다. ※ 복사 생성자를 만들..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 객체를 어떻게 구분하는가?#include class Point{ int x{0}; int y{0};public: void set(int a, int b) { x = a; y = b; }};int main(){ Point pt1; Point pt2; pt1.set(10, 20); pt2.set(10, 20);}- 위와 같은 예제가 있다고 생각할때, 우리가 이와 같은 의문을 가질 수 있다.- 멤버 데이터는 분명히 객체당 한 개씩 생성되고, 멤버 함수 또한 코드 메모리에 한 개만 만들어진다.- 이는 객체가 여러 개 생성되도 그러하다. 대체 어떤 객체인지 어떻게 구분하는 것일까?void set(int a, int b){..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. const 객체에서 발생할 수 있는 문제점#include class Point{public: int xpos, ypos; Point(int x, int y) : xpos{x}, ypos{y} {} void set(int x, int y) { xpos = x; ypos = y; } void print() { std::cout - 테스트를 위해 public에 멤버 데이터를 둔 상태이다. - 사실 이 예제는 아무런 문제가 없다. (실행만 생각한다면 말이다.)- 이때 객체를 const로 만들때 상황을 생각해보면, 아래와 같은 문제가 발생한다. 1-1. print()와 같은 값을 바꾸지 않는 함수도 에러 발생#incl..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. - Car 객체를 몇개나 생성하는지 알아보고 싶다고 가정해보자.- 멤버 데이터 count를 사용해서 시도했다.#include class Car{ int speed{0};public: Car() {} ~Car() {}};int main(){ Car c1; Car c2; std::cout - 멤버 데이터를 사용하면, 객체당 한 개가 생성된다.- 각 객체가 독립적인 자신의 count 멤버 변수를 사용하므로 이 방법은 실패다. - 이번엔, 전역변수 count를 사용해서 시도해보자#include int count{0};class Car{ int speed{0};public: Car(..
1. 복사 초기화 과정의 문제점class Vector{public: Vector(int size){}};int main(){ // C++98 Vector v1(10); Vector v2 = 10; // C++11 Vector v3{10}; Vector v4 = {10}; v1 = 20;}- 위 예제는 인자가 한 개(int)인 생성자가 있는 타입의 객체로 총 4가지의 객체 생성 방법을 보인다.- 이 때, '='가 있으면 Copy Initialization(복사 초기화)가 되고 없으면, Direct Initialization(직접 초기화)가 된다. - 인자가 한 개인 생성자는 변환의 용도로도 사용이 가능하다.- 이를 변환 생성자(Conversion constructor)라..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 멤버 데이터를 초기화 하는 3가지 방법- 멤버 데이터를 초기화 하는 방법은 크게 3가지가 존재한다. ① 지금까지 사용한 방법class Point{ int x; int y;public: Point(int a, int b) { x = a; y = b; }};- 우리가 알고 있는 가장 일반적인 방법이다. ② Member initializer list (C++98)class Point{ int x; int y;public: Point(int a, int b) : x{a}, y{b} { }}; ③ Default member initializer (C++11)class P..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. - 배열의 단점은 크기를 변경할 수 없다는 것이다.- 크기를 변경하려면, 처음에 필요한 만큼의 메모리를 동적 할당해서 사용해야 한다. 1. 동적 배열(vector)의 구현- 메모리 동적 할당 기능을 활용해서, 크기 변경이 가능한 배열을 직접 생각해보자. 1-1. 기본적인 buffer의 생성 - 대략 이런식으로 할당을 한다고 생각하여, 코드를 작성하면 아래와 같다.#include int main(void){ int* buff = new int[5]; buff[0] = 1;} 1-2. 크기의 변동- 1은 넣은 뒤의 값은 이와 같을 것이다. 이제 이것의 '크기'를 변동한다고 생각해보는 것이다.- 사이즈를 10..
※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다. 1. 생성자가 필요한 이유#include #include class Person{public: std::string name; int age;};int main(){ Person p = {"kim",25};}- struct와 class는 사용 방법이 유사하여, 위와 같이 사용은 가능하다.- 하지만 지난 시간 OOP 포스트에서 다뤘듯, 멤버 데이터를 외부에서 접근 시키는 행위는 다소 위험하다. ① 단계 1. 멤버 데이터를 private으로 수정한다.class Peson{private: std::string name; int age;};- 따라서, 보통 멤버 데이터는 private으로 설정한다. 문제는 이..