Southern Island

[ C++ ] C, C#, JAVA의 문법 차이점

by 월루

글의 목적

글쓴이가 C, C++, C#, JAVA, Python 등 여러 언어를 접하면서 서로 사용할 때마다 언어별 차이점 때문에 너무 헷갈리는 게 많아 이렇게 정리함.

 

C++의 차이점

1. foreach 지원 ( C 없음, 라이브러리 사용 시 지원 가능 )

int main() {
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
    for(int num : arr)
    	std::cout << num << std::endl;
}
1
2
...
9
10

 

2. 편리한 변수 초기화 ( C, JAVA, C# 지원안함 )

int main() {
    int a(10);
    float b(20.34);
    
    std::cout << a << '\t' << b << endl;
}
10	20.34

 

3. OOP 지원 및 생성자 위임 ( OOP : C 지원안함, 생성자 위임 : JAVA, C# 지원안함 )

class MyClass {
private:
    int a;
    int b;
    
public:
    MyClass(int a, int b) : a(a), b(b) { } // 생성자 및 변수선언 위임

    int getA() { return a; }
    int getB() { return b; }
}

 

4. 정적 맴버변수 초기화 불가능 및 초기화 방법 ( JAVA, C#는 초기화 가능 )

class MyClass {
public:
    static int a = 0; // 초기화 에러 발생]
    static int a; // 문제없음
}

int MyClass::a = 10; // 초기화 방법

 

5. 네임스페이스, 정적 변수, 정적 메서드 호출 시 '::' 키워드로 접근 ( JAVA, C#은 '.' 키워드 사용 )

class MyClass {
public:
    static int a;
    static void test(int a) { return a; }
}

int MyClass::a = 10; // static 변수 접근시 :: 키워드 사용

int main() {
    MyClass::test(20); // static 메서드 접근시 :: 키워드 사용
    std::cout << "Hello World!!" << std::endl; // namespace 접근시 :: 키워드 사용, using namespace std; 선언으로 std 생략가능
}

 

6. 상수형 매개변수, 상수명 메서드 ( C, JAVA, C# 지원 안 함, JAVA의 경우 제네릭의 상한제한과 하한제한을 사용하여 구현 가능 )

void test(const int a, int b) {
    a = 20; // 에러발생
    b = 10; // 문제없음
}

void test2(const int a, int b) const {
    a = 20; // 에러발생
    b = 10; // 에러발생
}

 

7. 추가예정...

 

마치며...

제가 글을 쓰는 가장 큰 이유는 배운 내용을 정리하고 나중에 다시 공부하기 위해서입니다, 따라서 잘못된 정보가 포함되어 있거나 중요한 내용이 빠져 있을 수 있습니다, 잘못된 내용이나 빠진 내용이 있는 경우 댓글로 말씀해주시면 정말 감사드리겠습니다!

블로그의 정보

남쪽의 외딴섬

월루

활동하기