본문 바로가기

C++

C/C++ 2차원 정적배열을 함수 매개변수로... 일반적으로 동적 배열은 매우 심플하게 Fun(int **a) 라는 형식을 사용하여 매개변수로 넘겨받는게 가능하다. 하지만 C와 C++에서 정적배열 int a[10][5] 을 넘겨줄때는 일반적인 포인터 전달방법이 에러가 난다. 왜이럴까나.ㄱ- ;; 어짜피 정적이든 동적이든 위치만 다를 뿐 배열자체가 포인터로 움직이게 되는데... 어째든 자꾸 잊어버리고 찾는 일이 잦아서 포스팅 ㄱ ㄱ 정적으로 배열을 선언 하였을때 매개변수로 넣는 방법은 간단하다. int a[10][5]; void fun(int (*a)[5]){} 행은 포인터로 받고 열은 인덱스로 받는 형식으로 넘기면 된다. 왜 이렇게 만들어 놨는지는 나중에 조사하면 다나와~ 더보기
try~catch문 예외처리를 하는 try~catch문은 if~else 문보다 효율적으로 예외처리를 한다. 예외 처리(Exception Handling) try{ //code } catch(t){/*code*/} /* try 불록을 끝내고 t 타입에 해당되는 예외상황을 처리한다. catch 다음 코드는 t에 의해 보고된 예외상황을 처리할 수 있는 적당한 작업을 수행해야 한다.*/ try문 내부에 예외가 발생하지 않았을때 실행할 코드를 넣는다. 만일 try문에 예외가 발생하게 된다면 catch문으로 제어가 옮겨진다. int main() { int i = 0; cout > i; try{ if(i == 0) throw i; }catch(int a){ cout 더보기
cin 과 제어문과 합체!! 상당히 유용한 코드라고 생각되어 블러그에 올리는데 딱히 줄만한 제목이 마땅치가 않다..;;; 이름이 따로 있을지는 모르겠지만 모르니까 일단 페스... while(cin >> x){} 처음 이 문장을 보고 단순하게 생각을 했다. x의 값이 있다면 true가 리턴되는 거니까 루프를 도는거지...라고 생각을 했다. 하지만 이 구문은 상당히 유용하게 사용된다. 일단 합을 구하는 프로그램에서 int sum = 0, x = 0; while(cin >> x) { sum += x; } 라고 한다면 콘솔창에서 스페이스 로 구분하여 입력을 구별한뒤 루프를 돌게 된다. 원래 while함수는 불변식을 가지고 bool대수를 비교한다. true면 루프를 돌지만 false면 루프를 종료한다. 여기서 cin을 조건식으로 사용한다는 .. 더보기
C++ 표준라이브러리 sort() 함수 사용하기 C++ 표준라이브러리 해더에 선언 되어있는 sort 함수는 data를 정렬하는 기능을 갖는다. 하지만 이 sort를 사용하기 위해서는 vector를 사용하여야 한다. vector 클레스는 템플릿 클레스로 간단하게 기능을 나타내면 다음과 같다. Vector::vector vector::size_type //가장 큰 vector에 들어가는 요소들의 최대 개수를 담을 수 있는 타입. v.begin() // v의 첫 번째 요소를 나타내는 값을 리턴 v.end() // v의 (하나 지난) 마지막 요소를 나타내는 값을 리턴 vector v;//타입 T 요소들을 담을 수 있는 빈 vector를 생성 v.push_back(e) //vector에 e로 초기화된 요소 하나를 추가한다. v[i] // i위치에 저장된 값을 .. 더보기
setprecision() 함수와 cout.precision()함수 정의 : iomanip 해더에 정의 setprecision함수는 C++에서 자리수를 맞추어 출력하기 위한 용도이다. 간단하게 C에서 printf ("%.2f",variable); 에서 %.2f 와 비슷한 효과를 가진다. 이런 함수를 조작자(manipulator)라고 하 며, 스트림을 조작하여 그 다음의 스트림 출력이 정해진 주요 자리수를 유지하도록 해준다. setprecision(3) 을 사용하면, 구현시스템에게 주요 자리수 세 자리까지ㅣ 출력 할 수 있도록 한 다. 보통 소수점 앞에 두 자리, 뒤에 한 자리를 사용한다. 이렇게 정밀도를 변경 하였다면, 출력 구문이 끝난후 다시 정밀도를 이전상태로 돌려줘야 한다. 이때 사용하는 함수는 cout.precision()이다. 보통 다음과 같이 사용된다. dou.. 더보기
완전 가상함수(일명 개 가상함수) 가상 함수가 왜 필요한지, 이전 Study에서 배웠다~ 이번에 완전 가상 함수에 대해서 알아보자. 완전 가상함수는 함수의 정의 없이 함수의 유형만을 Base-class에 기제 해놓은 것을 말한다. virtual return-type Function-name() = 0; 자...이때 완전 가상 함수가 단 하나라도 있는 class를 추상 클레스 라고 불리우며, 이 추상 클레스는 객체 생성이 불가능 하다. 여기서 좀 어렵다. 객체도 생성 할 수 없는 얘를 가지고 멀 하라는거야? 라고 생각이 드는데 맞다. 별로 할껀 없다.ㅡ,.ㅡ;; 이런 클레스는 상속을 목적으로 만들어지며, 주로 인터페이스 만을 제공한다. 음...추상적으로 이해하기 위하여 얘기로 주절거린다면.... 다들 책이나 학교에서 상속에 대한 개념을 이.. 더보기
동적 바인딩(Dynaminc Binding)과 가상함수 아.................................. 우선 글을 읽기 전에...이글을 올리기 5분전(담배 피고왔음..)에 중반까지 정리하다가 글을 날렸다가 다시썼다는 걸 알아두길 바란다. ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 자..다시 하자.ㅠㅠㅠ;;; 그리고 이 글을 읽기 전에 이전 study인 Derived class point to Base class point Variable 글을 읽고 오길 바란다. 않그러면 왜 동적바인딩이 필요한지를 이해하기가 좀 거시기 하다. 이전 study와 연결을 위해서 이전 study를 한번더 복습하면, 상속된 class 끼리의 포인터 는 서로 참조가 가능하다. 하지만 포인터의 자료형이 실.. 더보기
Derived class Point to Base class Point variable 먼가 제목이 포스가 있다.ㅋㅋㅋㅋ 음...별거는 아니고, 있는 그대로 해석을 해보면 Derived class 의 포인터를 Base class 의 포인터 객체에 넣는다! 라는 이야기다. 이거 좀 중요한데...제목을 PPT 제목과 그대로 가는 바람에....않보면 자기손해지....그렇지! 일반적으로 C++에서는 어떤 자료형의 주소를 다른 자료형 의 포인터에 대입을 하도록 허용하지 않는다. 먼말이냐고? double a; int *b = &a; 이런걸 허용하지 않는다는 것이다. 하지만...예외처리는 항상 존재하는 법이다(-by 기재표) 예외의 경우로 상속관계의 class 는 대입이 가능하다. 상속이라는 것은 어떠한 예외도 비켜가는 것이다. 솔직하게 책에도 기제가 되어있지만, 이딴 기능을 굳이 만들어 공부를 할때 .. 더보기
상속 II(생성) 상속을 공부를 않한건 아니지만 솔직히 상당히 대충 하고 넘어갔다.ㅡ.ㅡ; 상속의 기본 이전에 포스팅 했던거 같이 무엇인가를 물려 받는 것이다. 상속이 나온 이유는 프로그램 재 사용을 높이기 위한 방법이다. 기본적으로 상속에는 접근제어제가 총 3개가 되는데 private, public 외에 protected가 존재한다. 이는 상속된 파생 클래스에서는 접근을 허용하지만 외부 접근은 허용하지 않겠다는 의미이다. 또한 private 상속은 말이 상속이지 상속 않한다는 다름 없다-_-;; 예를 들어서... class a { private: int a; }; class b : public a { ....... }; 로 상속을 했다고 치면 b는 a의 private 멤버인 a에 접근을 할수 없다. ㅡ_ㅡ;; 그렇다고 .. 더보기
정적 멤버변수와 정적 멤버함수 C++을 대충 했더니 다시 배워야 하는 불쌍사가.ㅠㅠ!!!! 기본 개념을 잡고 있다. 하는김에 포스팅도 함께 하기로 했다. ㅡ0ㅡ 귀찬지만 이렇게 하면 복습이 가능하니까.^^ 정적 멤버변수와 정적 멤버 함수는 말은 먼가 있어 보이는데 실상은 결국 static 키워드로 치고 들어가는거다 별거 없다는걸 안순간 좀 뻥진다.... 정적 멤버변수의 활용은 대표저으로 무엇인가를 count 할때 가장 많이 쓰인데 예를 들어서 학생 정보를 저장하는 클래스가 있는데 객체를 생성하고 저장할때 마다 학생수를 세는 cnt 변수가 있다고 가정을 하면.. #include "iostream" #include using std::cout; using std::endl; class CStud { private: char name[30.. 더보기