cpp6

2023. 11. 4. 21:50개발하는중/cpp

728x90
반응형

 

디폴트(default constructor) 생성자?

매개변수가 없는 생성자, 또는 매개변수에 디폴트 인수가 지정된 생성자

컴파일러시 생성자 선언 안한경우 디폴트 생성자 자동 생성됨

 

복사(copy constructor) 생성자?

동일 클래스의 객체를 복사하여 객체를 만드는 생성자

목시적 복사 생성자 : 객체의 데이터 멤버들을 그대로 복사하여 객체를 만들도록 묵시적으로 정의된 복사 생성자

 

rvalue참조

선언 

&기호로 선언하는 lvalue 참조와 달리 rvalue 참조는 &&기호로 선언

 

이동(move constructor) 생성자?

rvalue 참조로 전달된 같은 클래스의 객체의 내용을 이동하여 객체를 만드는 생성자

 

static 데이터멤버

클래스에 속하는 모든 객체들이 공유하는 데이터 멤버

객체 생성과 관계없이 프로그램이 시작되면 메모리에 할당됨

 

static 멤버 함수

특정 객체에 대한 처리를 하는 것이 아니라 소속 클래스 단위 작업을 수행 하는 함수

static 멤버함수는 객체가 정의 되지 않아도 사용할 수 있음

 

디폴트 생성자는 인수를 지정하지 않고 객체를 생성할 수 있게 하며, 생성자를 명시적으로 선언하지 않으면 아무런 처리도 하지 않는 디폴트 생성자가 묵시적으로 정의된다.

복사 생성자는 기존의 동일 클래스 객체를 복사하여 새로운 객체를 만들 수 있게 한다.

rvalue 참조는 이동을 할 수 있는 대상을 참조하는 용도로 사용한다.

이동 생성자는 매개변수로 전달된, 앞으로 더 이상 필요하지 않을 객체의 내용을 ‘이동’하여 새로운 객체를 생성하기 위해 사용한다.

클래스에 속하는 모든 객체가 공유하는 데이터 멤버는 static 멤버로 선언하며, 객체 생성과 무관하게 프로그램을 시작할 때 생성된다.

클래스의 static 멤버함수는 특정 객체가 아닌 소속 클래스 단위의 작업을 수행하는 함수이며, static 멤버함수 안에서는 static 멤버만 사용할 수 있다.

 

스택 클래스

stack? 데이터를 저장하는 자료구조의 하나

스택의 기본연산 

push  데이터 저장

pop 마지막으로 저장한 데이터를 꺼내는 연산

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class CharStack {
    enum {
        size = 20
    };
    int top;
    char buf[size];
    
public:
    CharStack() : top{ size } {} // 생성자
    bool chkEmpty() const{ // stack null true 
        return top == size;
    }
    bool chkFull() const{    //  stack full true
        return !top;
    }
    bool push(char ch);
    char pop();
};
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
#include <iostream>
#include "CharStack.h"
using namespace std;
 
bool CharStack::push(char ch)
{
    if(chkFull()){
        cout << "stack is full" << endl;
        return false;
    }
    buf[--top] = ch;
    return true;
}
 
char CharStack::pop()
{
    if(chkEmpty()){
        cout << "stack is null" << endl;
        return 0;
    }
    return buf[top++]; // 데이터 반환 후 top + 1 후위연산 
}
 
 
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
#include <iostream>
#include "CharStack.h"
using namespace std;
 
int main()
{
    CharStack chStack;
    char str[20];
    
    cout << "write english word : " ;
    cin >> str;
    
    char* pt = str;
    while(*pt){
        chStack.push(*(pt++));
    }
    
    cout << "english word reverse output : ";
    while(!chStack.chkEmpty()){
        cout << chStack.pop();
    }
    cout << endl;
    
    return 0;
    
}
cs

 

 

복소수 클래스

복소수(complex number) ?

실수부(real part)와 허수부(imaginary part)로 구성되는 수

복소수 표현 = a + jb

a = 실수부의 값, b = 허수부의 값, j는 허수의 단위로 j2승 = -1임

켤레복소수(complex conjugate)

허수부의 부호가 반대인 복소수

a + jb의 결레복소수는 a-jb

 

 

위임 생성자 의 선언 *cpp 11이후

멤버 초기화 리스트에 클래스의 다른 생성자를 사용하여 새로운 생성자를 선언

 

push와 pop 연산을 이용하여 데이터를 저장하고 인출할 수 있는 자료구조로서, 나중에 저장된 데이터가 먼저 인출될 수 있는 특성(LIFO: Last In, First Out)을 갖는다.

배열과 top을 이용하여 스택을 구현할 수 있다. push는 top을 1 감소시킨 후 배열의 top 위치에 값을 저장하고, pop은 top 위치의 값을 반환하며 top을 1 증가시킨다.

실수부와 허수부의 값을 저장하는 데이터 멤버와 사칙연산 등 필요한 연산을 멤버함수로 정의하여 복소수 클래스를 구현할 수 있다.

생성자를 직접 호출하는 형식의 연산은 해당 클래스의 임시 객체를 만든다.

어떤 클래스의 객체가 필요한 위치에 그 클래스의 생성자의 형식 매개변수에 해당되는 값을 사용하면 묵시적 형 변환을 통해 그 클래스의 객체로 변환된다.

위임 생성자는 클래스에 선언된 다른 생성자를 이용하여 선언되는 생성자로서, 코드 중복을 줄일 수 있다.

std::initialize_list는 지정된 자료형의 값을 임의 개수 나열한 리스트를 만드는 데 사용되며, 첫 번째 매개변수가 std::initializer_list<Type>인 생성자를 초기화 리스트 생성자(initializer-list constructor)라고 한다.

728x90

'개발하는중 > cpp' 카테고리의 다른 글

cpp7  (4) 2023.11.09
cpp5  (0) 2023.11.04
cpp4  (1) 2023.11.02
cpp3  (1) 2023.10.21
cpp2  (0) 2023.09.25