C++ 프로그래밍/클래스

    멤버 초기화 리스트

    멤버 초기화 리스트

    생성자의 가장 큰 특징 중 하나인 멤버 초기화 리스트(member initialization list)는 생성자 함수 헤더와 함수 몸체 사이에 :를 넣고 클래스의 멤버 변수와 매개변수를 "멤버(매개변수)"의 형태로 나열하는 것입니다. class Complex { double real, imag; public: Complex(double r = 0, double i = 0) : real(r), imag(i) {} }; void main() { Complex a(2.0, 4.0); //객체 초기화 } 여기서 real(r)은 real = r과 똑같이 동작합니다. 이제 함수 블록에 멤버의 초기화 코드를 적을 필요가 없게 됩니다. 이 방법은 얼핏 보면 초기화 방법의 변경에 지나지 않는 것이라고 보이지만 사실 매우..

    생성자와 멤버 함수의 유사점과 차이점

    생성자와 멤버 함수의 유사점과 차이점

    유사점 클래스의 멤버 변수와 멤버 함수를 마음대로 사용할 수 있다. 함수 중복을 사용할 수 있다. 디폴트 매개변수도 지원한다. 여러 생성자를 한꺼번에 정의하는 강력한 효과가 있다 차이점 생성자는 일반적인 멤버 함수에 비해 다음과 같은 차이가 있습니다. 생성자는 반환형이 없다. void도 사용할 수 없다. 함수의 이름이 클래스와 동일하다. 생성자는 객체가 생성될 때 오직 한 번만 호출된다. 다른 멤버 함수와는 달리 일단 생성된 객체에서 다시 생성자를 호출할 수는 없다. 생성자가 하나도 정의되어 있지 않으면 컴파일러가 자동으로 기본 생성자(default constructor)를 제공한다. 대부분의 경우 생성자는 고용 접근 권한 public을 갖도록 권한다. 멤버 초기화 리스트(member initializa..

    구조체에서 클래스로

    구조체에서 클래스로

    C언어로 잘 만들어진 구조체와 관련 함수들을 클래스로 변경하는 것 자체는 크게 어렵지 않습니다. Complex라는 구조체와 관련 함수를 4번의 변화로 클래스로 변경해 보겠습니다. 1. 구조체와 일반 함수로 구현된 Version1 #pragma once #include struct Complex { doublereal; doubleimag; }; extern void setComplex(Complex &c, double r, double i) { real = r; imag = i; } extern voidreadComplex(char* msg = " 복소수 ="); extern voidprintComplex(char* msg = "복소수 = "); extern voidaddComplex(Complex a,..

    클래스의 멤버 변수나 멤버 함수를 static으로 처리하는 경우

    클래스의 멤버 변수나 멤버 함수를 static으로 처리하는 경우

    클래스 내에서 멤버 변수 앞에 static을 붙인걸 정적 멤버 변수라고 합니다. 클래스에서 선언했던 모든 멤버 변수들은 "객체 단위의 멤버"로 객체들 마다 각기 다른 값을 가질 수 있는 독립된 변수입니다. 예를 들어, Point라는 클래스를 만들고 객체 p1,p2,p3라는 객체를 선언하면 메모리 공간이 각각 생깁니다. 하지만 정적 멤버 변수는 객체마다가 아닌 클래스 단위로 존재합니다. 그렇다면, 왜 정적 멤버 변수가 필요할까요? 이유는 프로그램에서 Point 클래스의 객체가 현재 몇 개인지 알고 싶을 때 클래스의 버전이나 개발 정보를 클래스에 남기고 싶을 때 등등이 있습니다. 정적 멤버 변수에 대해 더 자세하게 말하면 클래스 내부에서 정의하지만 일반 멤버 변수와 달리 객체마다 생기는 자료가 아니라 클래스..