Server/C++

클래스 (Class)

Juzdalua 2024. 7. 25. 16:45
#include <stdio.h>
#include <iostream>

using namespace std;

class MyClass
{
public:
    int age;
    char *name;

private:
    float pi;

public:
    MyClass() // 생성자
        : age(1), name((char *)"AB"), pi(3.14f)
    {
    }

    ~MyClass() // 소멸자
    {
        printf("%s, %d, %f \n", name, age, pi);
    }

public:
    void SetAge(int _age)
    {
        this->age = _age;
    }
};

int main()
{
    // 기본 사용법
    MyClass newClass;
    newClass.SetAge(11);
    newClass.name = (char *)"ab";

    // 클래스 동적할당
    MyClass *newClass2 = new MyClass;
    delete newClass2;

    return 0;
}

클래스 멤버변수의  default 접근 제한 지정자는 private 이다.


클래스로 배열 만들기

// arr.h

#pragma once

// 클래스로 배열 만들기
class CArr
{
private:
    int *pData;
    int count;
    int maxCount;

public:
    void RPush(int data);
    void resize(int resizeCount);
    int &operator[](int idx);

public:
    CArr();
    ~CArr();
};
// arr.cpp

#include "arr.h"
#include <iostream>
#include <cassert>

CArr::CArr() : pData(nullptr),
               count(0), maxCount(1)
{
    pData = new int[1];
}

CArr::~CArr()
{
    delete[] pData;
}

void CArr::RPush(int data)
{
    if (this->maxCount <= this->count)
    {
        resize(this->maxCount * 2);
    }
    this->pData[this->count] = data;
    this->count++;
}

void CArr::resize(int resizeCount = 1)
{
    if (this->maxCount >= resizeCount)
    {
        assert(false);
    }

    int *pNewData = new int[resizeCount];
    for (int i = 0; i < this->count; i++)
    {
        pNewData[i] = this->pData[i];
    }
    delete[] this->pData;

    this->pData = pNewData;
    this->maxCount = resizeCount;
}

int &CArr::operator[](int idx)
{
    return this->pData[idx];
}
// main.cpp

#include <stdio.h>
#include <iostream>
#include "./include/Array/arr.h"

using namespace std;

int main()
{
    CArr cArr;
    cArr.RPush(1);
    cArr.RPush(2);
    cArr.RPush(3);

    int data = cArr[2];
    cArr[2] = 22;
    printf("%d \n", cArr[2]);

    return 0;
}

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

STL) Vector와 List  (0) 2024.07.27
템플릿 (template)  (0) 2024.07.26
Linked List  (0) 2024.07.23
함수와 포인터  (0) 2024.07.23
랜덤 정수 생성  (1) 2024.07.23