프로그래밍 언어
C# 클래스 타입 업/다운 캐스팅 (Up-DownCasting)
업캐스팅 부모 클래스 객체를 자식 클래스 객체로 변환. 인스턴스화 또는 자식 클래스 객체 할당하는 방법이 존재. 다운캐스팅 자식 클래스 객체를 부모 클래스로 객체로 변환. 오직 부모 클래스 객체로부터 할당만 가능. using System; using System.Collections.Generic; using System.Runtime.InteropServices; public class Parent { public virtual void Print() { Console.WriteLine("Parent 클래스"); } } public class Child : Parent { public override void Print() { Console.WriteLine("Child 클래스"); } } public..
C++ 클래스 타입 업/다운 캐스팅 (Up-DownCasting)
업캐스팅 클래스 객체를 기반 클래스로 변환하는것. 부모형으로 자식 클래스의 메소드에 접근 가능한 경우 추상메소드를 자식클래스에서 정의한 경우 부모클래스에 정의된 메소드를 자식에서 오버라이딩한 경우 class Parent { public: virtual void Print() { cout
C++ 명시적 형변환/캐스팅 (explicit)
명시적 형변환 int intVal = 2; float floatVal = (float)intVal; float floatVal = float(intVal); 아래와 같은 차이가 존재한다. int first = 5; int second = 2; float floatVal = first / second; float floatVal2 = (float) first / second; std::cout
C++ 상수식 (constexpr)
constexpr은 const처럼 변수에 적용 할 수 있으며 해당 변수에 대한 변경을 시도하면 컴파일러는 에러를 발생한다. const와는 다르게 생성자에 적용 할 수 있다. constexpr로 지정된 값이나 리턴 값이 상수이며 컴파일 타임에 계산된다. 템플릿 인수 및 배열 선언 같은 const 정수 값이 사용되는 곳에 constexpr 정수 값이 사용 될 수 있다. 컴파일 타임에 값이 계산되면 프로그램 실행 속도가 빨라지며 메모리 사용량이 줄어든다. constexpr 리턴 값 constexpr 함수의 리턴 값이 constexpr 속성을 가지려면 리터럴 타입이어야 한다. const int64_t const_mypow(int64_t itarget, int isquare) { if (isquare
C++ 클래스 상속 불가 및 함수 오버라이딩 불가 (final)
최종 키워드를 사용하여 상속할 수 없는 클래스를 지정하거나 파생 클래스에서 재정의할 수 없는 가상 함수를 지정할 수 있다. 다음 예제에서는 최종 키워드를 사용하여 클래스를 상속받을 수 없도록 지정한다. class Parent final { }; class Derived : public Parent { }; 다음 예제에서는 최종 키워드를 사용하여 가상 함수를 오버라이딩 할 수 없도록 지정한다. class Parent { public: virtual void Print() final { } virtual void Print2() { } }; class Derived : public Parent { public: virtual void Print() override { } virtual void Print2(..
C# 읽기 전용 (readonly)
readonly 키워드는 다음 네 가지 컨텍스트에서 사용할 수 있는 한정자다. 필드 선언에서 필드에 대한 할당을 나타내는 readonly는 선언의 일부로 또는 동일한 클래스의 생성자에서만 발생할 수 있다. 필드 선언과 생성자 내에서 읽기 전용 필드를 여러 번 할당 및 재할당할 수 있다. 값 형식은 해당 데이터를 직접 포함하므로 값 형식인 readonly 필드는 변경할 수 없다. 참조 형식에는 해당 데이터에 대한 참조가 포함되므로, readonly 참조 형식인 필드는 항상 같은 개체를 참조해야해당 개체를 변경할 수 있다. 생성자가 종료된 후에는 readonly 필드를 할당할 수 없다. 이 규칙의 의미는 값 형식과 참조 형식에서 서로 다르다. readonly struct 형식 정의에서 readonly는 구조..
C# 클래스 상속 불가 및 함수 오버라이딩 불가 (sealed)
클래스에 적용된 경우 sealed 한정자는 다른 클래스가 해당 클래스에서 상속하지 못하도록 한다. using System; using System.Collections.Generic; using System.Runtime.InteropServices; public class Parent { } public sealed class Derived : Parent { } public class AnotherDerived : Derived { } public class Test { public static void Main() { AnotherDerived anotherDerived = new AnotherDerived(); } } 함수 같은 경우에는 가상 함수 오버라이딩 방지용으로 쓰여진다. using Sys..
C# 중첩 클래스 (Nested Class)
클래스 내부에서 클래스를 정의할 수 있다. 중첩 클래스를 사용하여 클래스를 그룹화할 수 있으며, 클래스의 사용 범위를 제한할 수 있다. class OutsideClass { // ... class InsideClass { // ... } } OutsideClass 내부에 InsideClass 클래스를 정의했으므로 OutsideClass는 중첩 클래스다. 사용하는 이유 클래스를 논리적으로 그룹화할 수 있다. 특정 클래스 내부에서만 사용되기 때문에 코드를 더 쉽게 파악할 수 있으며, 유지 관리가 쉽다. 특정 클래스 내부에서만 사용되므로 클래스 구조가 단순해진다. 예제 학교에는 선생님이 존재하므로 School 클래스 내부에 Teacher 클래스를 선언한다. public class School { public ..
C++ 중첩 클래스 (Nested Class)
중첩 클래스의 이름은 포함 클래스의 범위에 있으며 중첩 클래스의 멤버 함수에서 이름을 조회하면 중첩 클래스의 범위를 검사 한 후 포함 클래스의 범위를 방문한다. 둘러싸는 클래스의 다른 멤버와 마찬가지로 중첩 클래스는 둘러싸는 클래스가 액세스하는 모든 이름 (개인, 보호 등)에 액세스 할 수 있지만 그렇지 않으면 독립적이며 둘러싸는 클래스 this 포인터에 대한 특별한 액세스는 없다 . 중첩 클래스의 선언은 둘러싸는 클래스의 형식 이름, 정적 멤버 및 열거 자만 사용할 수 있다. (C ++ 11까지) 중첩 클래스의 선언 은 비 정적 멤버에 대한 일반적인 사용 규칙 에 따라 둘러싸는 클래스의 모든 멤버를 사용할 수 있다 . (C ++ 11부터) int x,y; // globals class enclose {..
C++ 친구 클래스 및 함수 (friend)
friend 클래스는 friend로 선언된 다른 클래스의 private 및 protected 멤버에 접근할 수 있다. 사용법은 friend 키워드를 사용하여 클래스나 함수를 명시 해 주는 것이다. 함수 같은 경우에는 전역함수랑 동일해진다, static 클래스 종속 함수랑은 별개. #include #include #include using namespace std; class A { friend class B; int mVal = 0; protected: void ProtectedFunc() { cout