'Programming/C++ STL'에 해당되는 글 61건

  1. 2014.03.14 cpp 와 java의 차이점(문법)
  2. 2014.03.12 cpp 디폴트 매개변수
  3. 2014.03.11 CUnit
  4. 2014.03.10 c -> cpp 추가사항
  5. 2014.03.10 오버로딩 / 오버라이딩
  6. 2014.03.05 try - throw - catch
  7. 2014.03.04 연산자 오버로딩
  8. 2014.02.28 c++ explicit
  9. 2014.02.28 c++ class / const member variable & function
  10. 2014.02.27 deep copy / shallow copy < object copy
Programming/C++ STL2014. 3. 14. 00:11
이런거 비교가 의미가 있나 싶긴 하지만..


클래스 멤버 변수
cpp - const static 외에는 class 멤버 변수에 값을 주고 클래스를 생성할 수 없다. 
error C2864: 정적 상수인 정수 계열 데이터 멤버만 클래스 내부에서 초기화될 수 있습니다.
[링크 : http://msdn.microsoft.com/ko-kr/library/acxkb76w.aspx ] 

동적 바인딩
cpp - 자바처럼 작동 시키려면 오버로딩시 virtual로 선언하여야 함
java - 오리지널 객체의 형을 추적함

클래스 메소드와 클래스 멤버 변수명의 중복
cpp - 식별자로서 변수와 메소드의 중복 허용하지 않음
java - 동적 바인딩(?)으로 인해 구분이 가능하므로 멤버 변수와 멤버 메소드가 동일한 명칭이 가능함 

가변인자 
cpp - 타입에 민감하지 않아 ... 로 선언되는 가변인자에 다양한 타입을 받을 수 있음
java - JDK1.5 이후 지원하며 타입대로만 입력을 받아야 함

Abstract, interface(implement) vs virtual
cpp - virtual 키워드를 통해 상속받는 쪽에서 오버라이드를 강요하도록 사용함
java  - 다중상속의 잇점을 누리기 위해 java에서는 interface를 제공함

'Programming > C++ STL' 카테고리의 다른 글

cpp scope 연산자  (0) 2014.03.18
cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
cpp 와 java의 차이점(문법)  (0) 2014.03.14
cpp 디폴트 매개변수  (0) 2014.03.12
CUnit  (0) 2014.03.11
c -> cpp 추가사항  (0) 2014.03.10
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 12. 17:28
cpp에서 제공하는 디폴트 매개변수는 가변인자와 묘하게 섞여있는 느낌이다.

void test(int a = 1, int b = 2, int c = 3);

test();
test(1);
test(1,2);
test(1,2,3); 

인자 갯수보다 적게 입력이 가능하면서
생략된 인자에 대해서는 기본값으로 초기화를 수행한다.

[링크 : http://printf.egloos.com/1770599]

'Programming > C++ STL' 카테고리의 다른 글

cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
cpp 와 java의 차이점(문법)  (0) 2014.03.14
cpp 디폴트 매개변수  (0) 2014.03.12
CUnit  (0) 2014.03.11
c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 11. 22:16

[링크 : http://cunit.sourceforge.net/doc/index.html]
[링크 : https://github.com/xgsa/cdt-tests-runner/wiki/Tutorial

'Programming > C++ STL' 카테고리의 다른 글

cpp 와 java의 차이점(문법)  (0) 2014.03.14
cpp 디폴트 매개변수  (0) 2014.03.12
CUnit  (0) 2014.03.11
c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 10. 13:00
변수형
bool - true / false

함수 확장
class - class / friend / virtual / overriding
template - template / overloading

상속/객체
const 키워드 확장 (컴파일러 레벨에서의 함수내 값변경 방지)
static 키워드 확장 (java의 private?)

포인터 확장
this
& (reference) 

예외처리
try
catch
throw 


constructor (create triggered action) / destructor (remove triggered action) 를 통해 자동화를 지원
기존의 static 을 통한 파일 단위의 접근 제어에서 클래스 단위 접근 제어 확장
try-catch-throw를 통한 goto 문의 사형선언
overloading과 template을 통한 개발의 용의함(overloading을 통한 타입의 identifier화) 

이런게 c와 cpp을 구분짓는 가장 큰 요소인것 같다. 

'Programming > C++ STL' 카테고리의 다른 글

cpp 디폴트 매개변수  (0) 2014.03.12
CUnit  (0) 2014.03.11
c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 10. 12:49
오버로딩은 동일 이름의 함수에
인자의 갯수나 타입에 따라서 다르게 작동하도록
함수를 중첩/중복 시킨다.

over load + ing에 걸맞게
함수명 중복정의 이런식으로 했으면 좀 쉬웠으려나?

2013/03/04 - [Programming/C++ / STL] - c++ function overloading


그리고 오버라이딩은
상속관계에서 이전에 정의된 함수를 갈아 엎고
함수 이름과 인자가 동일하지만 작동을 전혀 다르게 할 경우 사용한다.

over ride + ing 을 함수 재정의 라고 하기도 한다.

일단.. overloading은 능동형이고 짐을 더 올려주는 느낌이라면
overriding은 피동형(올라타버림) 이고 주도권을 빼앗겨지는 느낌

load와 ride의 느낌이 비슷해서 였을까..
왜 예전에는 두개가 이렇게 헷갈렸을까 ㅠㅠ 

'Programming > C++ STL' 카테고리의 다른 글

CUnit  (0) 2014.03.11
c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 5. 22:49
java와 같은 그런 정교한 예외처리는 아닌거 같아서 조금 실망
물론..cpp가 java보다 거의 20년 전 꺼라는걸 감안하면...

아무튼.. try{} 안에 문제점이 될 부분에서
문제점에 대한 if문을 하고 throw를 통해 (물론 타입별로 catch 문을 중첩가능함) 제어의 흐름을 통일 시킨다.
과거에는 수 많은 return문으로 구현하거나
에러발생시 끝부분으로 goto 하는걸 문법적으로 깔끔하게 구현한 셈

#include < iostream >
using namespace std;
int main(int argc, char **argv)
{
		int a = 12;
		int b = 1;
		double c = 0;

		try
		{
			if(b == 0) throw(b);
			else throw(c);
		}
		catch(int e)
		{
			cout << "divide by zero. throw " << e << endl;
		}
		catch(double e)
		{
			cout << "good job. throw " << e << endl;
		}

        return 0;
}

스탠다드 라이브러리로 존재한다.
#include <exception>
[링크 : http://www.cplusplus.com/reference/exception/exception/ ] 

'Programming > C++ STL' 카테고리의 다른 글

c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 3. 4. 23:10
연산자 오버로딩은 2가지 방법으로 사용이 가능한데
1. 외부함수를 friend로 허용 (2항)
2. 내부함수로 구현(1항)


외부 함수의 경우 2개의 값이 있어야 연산이 가능하기에 인자가 두가지 들어가지만
내부 함수로 구현할 경우 자기 자신을 기준으로 다른 값을 연산하기에 하나의 값만 받게 된다.

#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
        int operator+(int b, int c) { a += b; return a; }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

위 소스는 의도적으로 내부함수에 대해서 2개의 인자를 주고 생성한 것이라 에러가 발생한다.
VS2008
 error C2804: 이항 'operator +'에 매개 변수가 너무 많습니다.

G++
 error: ‘int temp::operator+(int, int)’ must take either zero or one argument 


정상작동하는 소스, int operator+는 멤버함수로 구현 friend int operator+는 외부함수/friend 로 구현
#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
//      int operator+(int b) { a += b; return a; }
        friend int operator+(temp t, int b)
        {
                t.a = t.a + b;
                return t.a;
        }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

'Programming > C++ STL' 카테고리의 다른 글

오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 2. 28. 11:01
class_name a;
a =  val;

이런식으로 암시적으로 형 변환을 할 경우에 대해서
제한을 걸어 예측이 힘든 버그들을 막아주는 역활을 한다고 한다.

[링크 : http://opensw.wikidot.com/cpp-fundamentals-explicit]
[링크 : http://msdn.microsoft.com/en-us/library/h1y7x448.aspx]

'Programming > C++ STL' 카테고리의 다른 글

try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 2. 28. 10:35
const 멤버변수는 초기화가 불가능 하지만 클래스에서 값을 준채로 초기화 할 수 없기에
 constructor(variables ...) : const variable(parameter) 

생성자에서 : 키워드를 이용하여 초기화 한다.(상속이 아니다!!!)
class class_name
{
    const int key; // const member variable

    class_name(int _key) : key(_key)
    {
    }
};  

아무튼.. const 멤버 변수가 하나라도 있으면 모든 생성자에 영향을 주는 듯
class student
{
	const int id;
	int age;
	char name[20];
	char subject[30];

public:
	student()
	{
	}

	student(int _id) : id(_id)
	{

	}

	student(int _id, int _age, char *_name, char *_subject) : id(_id)
	{
		age = _age;
//		id = _id;
		strcpy(name, _name);
		strcpy(subject, _subject);
	}

1>d:\cpp\ch12\ch12\ch12.cpp(13): error C2758: 'student::id' : 생성자 기본/멤버 이니셜라이저 목록에 초기화해야 합니다.
1>          d:\cpp\ch12\ch12\ch12.cpp(7) : 'student::id' 선언을 참조하십시오.
1>d:\cpp\ch12\ch12\ch12.cpp(44): error C2582: 'operator =' 함수는 'student'에서 사용할 수 없습니다. 


+
const 멤버 함수
 ret_type function(parameter ...) const

const 함수 내에서는
값을 조작할 수 없으며(포인터 값 return도 불가)
const 함수만 호출이 가능하다.
 

'Programming > C++ STL' 카테고리의 다른 글

연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014. 2. 27. 11:46
객체 복사에 대한 전략이다.

깊은 복사는 캐릭터 배열까지 모든 데이터를 복사하며
얕은 복사는 primitive type 만 복사한다.

얕은 복사의 경우
포인터는 포인터 주소를 복사함으로 2중 delete가 발생할 수 있기에
포인터 사용시에는 new 이후 내용자체를 수작업으로 복사해야 한다.

[링크 : http://en.wikipedia.org/wiki/Object_copy]

'Programming > C++ STL' 카테고리의 다른 글

c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
C++11 Lambda Fuction  (2) 2013.11.20
Posted by 구차니

댓글을 달아 주세요