'C++'에 해당되는 글 17건

  1. 2018.09.08 C++ 자바 상속 비교
  2. 2018.08.20 C++ String 문자열 사용법 정리

C++ 자바 상속 비교



상속의 목적은 C++과 자바 모두 동일합니다.

우리가 상속을 받는 목적은 코드를 재사용하거나 is-a 관계를 생성하기 위함입니다.

그렇다면 이 두 객체지향언어(Object-Oriented Laguage)의 상속의 차이점에 대해 비교해보겠습니다.


◎ 자바에서 모든 클래스(Class)는 직접 또는 간접적으로 Object Class에서 상속받습니다. 자바에서 상속받지 않는 클래스를 작성하면 기본적으로 Object 클래스에서 자동으로 상속됩니다. 


◎ 자바에서는 부모의 부모(조부모; GrandParent) 클래스에 직접 접근할 수 없습니다.(not directly accessible, c++에서는 :: 연산자를 사용하여 접근 가능합니다.) 부모의 부모 클래스에 접근하기 위해서는 부모 클래스를 통해 접근할 수 있습니다. 


예)

class GrandParent {

public void Print() {

System.out.println("GrandParent");

}

}


class Parent extends GrandParent {

public void Print() {

System.out.println("Parent");

}

}


class Child extends Parent {

super.super.Print(); // 에러 발생!!

public void Print() {

System.out.println("parent");    

}

}


class Main {

public static void main(String args[]) {

Child c = new Chid();

c.Print();

}

}


위 코드는 super.super.Print() 줄에서 오류가 발생합니다. 아래 코드처럼 수정할 수 있습니다.


class GrandParent {

public void Print() {

System.out.println("GrandParent");

}

}


class Parent extends GrandParent {

super.Print();

public void Print() {

System.out.println("Parent");

}

}


class Child extends Parent {

super.Print(); // 부모 클래스를 통해 접근 가능!

public void Print() {

System.out.println("parent");

}

}


class Main {

public static void main(String[] args) {

Child c = new Chid();

c.Print();

}

}


◎ 상속받지 않은 다른 클래스에서 protected 멤버에 접근할 수 있습니다.(클래스가 같은 패키지에 존재 해야합니다.)


예)

class A {

protected int x = 10;

}

class B {

public static void main(String[] args) {

A a = new A();

System.out.println(a.x); // 접근 가능!!

}

}


◎ 자바에서 상속은 extends 키워드를 사용합니다. C++과 달리 public, protected, private과 같은 지정자를 제공하지 않습니다. 


◎ 자바에서 메소드는 기본적으로 가상(Virtual) 메소드입니다. C++에서는 virtual 키워드를 명시적으로 사용해야 합니다.


예)

class A {

public void Print() {

System.out.println("A");

}

}


class B extends A {

public void Print() {

System.out.println("B");

}

}


class Main {

public static void main(String[] args) {

A a = new B();

b.show(); // B가 출력!!

}

}


◎ 자바는 추상클래스(abstract)와 인터페이스(interface)를 구분된 키워드로 사용합니다.


◎ 자바는 다중 상속(둘 이상의 클래스에서 상속)을 지원하지 않습니다. C++은 지원합니다.




코드는 직접 작성했기 때문에 오타 때문에 정상적으로 작동하지 않을 수 있습니다.

해당 게시글에 대한 궁금한점 있으시면 댓글로 달아주시면 답변 해 드리겠습니다.

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.

'C, C++' 카테고리의 다른 글

C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C++ 벡터 사용법  (2) 2018.09.26
C언어 포인터  (8) 2018.09.25
C 랜덤 - 난수 생성하기  (7) 2018.09.06
C++ String 문자열 사용법 정리  (0) 2018.08.20
[C++] C# 연동하기 / C# dll 파일 만들기  (1) 2018.08.18


♣ string 헤더파일을 include 해준다. 

    #include <string> ← 추가!


※ append : 문자열 추가 

⇒ 추가 하고자 하는 문자열이 기존 문자열 뒤에 추가됨.

사용법 : str.append("문자열");

* str += "문자열"; 또는 str = str + "문자열"; 도 같은 원리로 작동합니다.


※ assign : 문자열 대입

⇒ 해당 변수에 문자열을 할당.(변수 정의와 같음)

사용법 : str.assign("문자열");

* str = "문자열" 도 같은 원리로 작동합니다.


※ clear : 문자열 삭제

⇒ 해당 변수의 문자열을 삭제한다.

사용법 : str.clear();


※ compare : 문자열 비교

⇒ 해당 변수와 입력 된 문자열을 비교한다.

사용법 : str.compare(str2);

반환값 : str == str2 이면 0 반환 / str > str2 이면 1 반환 / str < str2 이면 -1 반환

(여기서 str > str2 는 대소 비교가 아니라 사전순으로 비교해서 앞, 뒤를 의미)


※ erase : 문자열 삭제

⇒ 해당 변수의 문자열을 삭제한다.(범위 지정 가능)

사용법 : str.erase(시작 위치, 끝 위치); 또는 str.erase(); 

(시작 위치와 끝 위치를 지정해주면 해당 범위의 인덱스의 문자열이 삭제된다. 매개변수 없이 호출하면 clear와 같은 동작)


※ find : 문자 위치 검색

⇒ 해당 변수의 문자열 중 검색하려는 문자의 위치를 반환.

사용법 : str.find('문자');


※ length : 문자열 길이

⇒ 해당 변수의 문자열의 길이를 반환.

사용법 : str.length();

(문자열의 길이는 null을 포함하지 않는다.)


※ to_string : int to string

⇒ int 변수를 string 변수로 변환 

사용법 : string str = to_string(정수)


※ atoi : string to int

⇒ string 변수를 int 변수로 변환

사용법 : int i = atoi(str.c_str());

(atoi 매개변수 인자가 char*이므로 c_str() 함수를 사용하여 변환 해 주어야 함)


※ reverse : 문자열 뒤집기

⇒ 문자열을 역순으로 뒤집는다.

사용법 : 

string s = "abc";

reverse(s.begin(), s.end()); // "cba" 출력




오타나 질문사항은 댓글로 달아주세요!

'C, C++' 카테고리의 다른 글

C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C++ 벡터 사용법  (2) 2018.09.26
C언어 포인터  (8) 2018.09.25
C++ 자바 상속 비교  (0) 2018.09.08
C 랜덤 - 난수 생성하기  (7) 2018.09.06
[C++] C# 연동하기 / C# dll 파일 만들기  (1) 2018.08.18

to Top