반도체/C++

클래스 잘쓰는법

Clair_de_Lune 2024. 12. 4. 09:40
728x90

1. 클래스 정의
클래스를 정의할 때는 데이터 멤버와 멤버 함수를 잘 구조화해야 합니다.

cpp


class Rectangle {
private:
    double width;
    double height;

public:
    Rectangle(double w, double h) : width(w), height(h) {}

    double area() const {
        return width * height;
    }

    void setWidth(double w) {
        width = w;
    }

    void setHeight(double h) {
        height = h;
    }
};
2. 접근 제어
private: 클래스 외부에서 접근할 수 없음.
protected: 서브 클래스에서만 접근 가능.
public: 클래스 외부에서 접근 가능.
적절한 접근 제어를 통해 데이터 은닉을 유지하고, 클래스의 인터페이스를 명확히 해야 합니다.

3. 생성자와 소멸자
생성자는 객체가 생성될 때 호출되며, 초기화를 담당합니다. 소멸자는 객체가 소멸될 때 호출됩니다.

cpp


class Example {
public:
    Example() {
        // 초기화 코드
    }

    ~Example() {
        // 정리 코드
    }
};
4. 복사 생성자와 대입 연산자
클래스 객체의 복사 시 깊은 복사를 원하는 경우 복사 생성자와 대입 연산자를 정의해야 합니다.

cpp


class MyClass {
private:
    int* data;

public:
    MyClass(int value) {
        data = new int(value);
    }

    // 복사 생성자
    MyClass(const MyClass& other) {
        data = new int(*other.data);
    }

    // 대입 연산자
    MyClass& operator=(const MyClass& other) {
        if (this != &other) {
            delete data; // 기존 메모리 해제
            data = new int(*other.data);
        }
        return *this;
    }

    ~MyClass() {
        delete data;
    }
};
5. 상속
클래스를 상속받아 새로운 클래스를 생성할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.

cpp


class Shape {
public:
    virtual double area() const = 0; // 순수 가상 함수
};

class Circle : public Shape {
private:
    double radius;

public:
    Circle(double r) : radius(r) {}

    double area() const override {
        return 3.14 * radius * radius;
    }
};
6. 다형성
가상 함수를 사용하여 다형성을 구현할 수 있습니다. 이를 통해 부모 클래스의 포인터나 참조로 자식 클래스 객체를 다룰 수 있습니다.

cpp


void printArea(const Shape& shape) {
    std::cout << "Area: " << shape.area() << std::endl;
}

Circle circle(5);
printArea(circle);  // Circle의 area() 호출
7. STL과의 통합
C++의 표준 템플릿 라이브러리(STL)와 잘 통합하여 클래스를 사용할 수 있습니다. 예를 들어, std::vector를 사용하여 객체를 저장할 수 있습니다.

cpp


#include <vector>

std::vector<Circle> circles;
circles.emplace_back(5);
8. 예외 처리
클래스 내에서 예외를 처리하여 안정성을 높일 수 있습니다.

cpp


class Division {
public:
    double divide(double a, double b) {
        if (b == 0) {
            throw std::invalid_argument("Division by zero");
        }
        return a / b;
    }
};

728x90

'반도체 > C++' 카테고리의 다른 글

C++ enum 열거형  (0) 2024.12.04
38. C++ 화살표 연산자  (0) 2024.09.04
36. C++에서 배열과 포인터 관계  (0) 2024.09.03
35. C++에서의 포인터 개념  (0) 2024.09.03
34.1 사원 관리 프로그램 추가 C++  (0) 2024.09.03