Programming/C++ STL2016.07.11 11:28

좋은 내용들이 있어서 저장

Shape::Shape (const Point center,

const int color)

{

_center = center;

_color = color;

}


Shape::Shape (const Pointer center,

const int color)

: _center(center)

, _color (color)

{


[링크 : http://ogoons.tistory.com/59]


상식을 깨는(!)

초기화를 위해 constructor에 너무 많은걸 넣지 말라라던가(객체 생성시 오버헤드로 인해 초기화 연산자로?)

등등?

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

cpp thread.... / pthread  (0) 2016.07.11
객체지향과 if문?  (0) 2016.07.11
cpp 클래스 구성  (0) 2016.07.11
cpp enum in class  (0) 2016.07.01
cpp const  (0) 2016.06.22
const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2016.07.01 10:04

cpp이랑은 안친한데 크윽 ㅠㅠ

컴파일러나 Cxx 적용 버전의 차이겠지만


$ g++ --version

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Copyright (C) 2011 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


g++ 4.6.3 에서는 scope 인식을 하긴 하는데

$ cat enum.cpp

#include <iostream>


class A

{

public:

        int a;

        enum

        {

                A_1,

                A_2,

                A_3

        };

};


class B

{

public:

        int b;

        enum

        {

                B_1,

                B_2,

                B_3

        };


};


int main()

{

        A a;

        B b;


        a.a = B_1;

        a.a = A_1;


        b.b = A_1;

        b.b = B_1;

        return 0;

}


$ g++ enum.cpp

enum.cpp: In function ‘int main()’:

enum.cpp:33:8: error: ‘B_1’ was not declared in this scope

enum.cpp:34:8: error: ‘A_1’ was not declared in this scope 


clang에서는 scope를 조금더 정밀하게 따지는 듯?

$ clang --analyze enum.cpp

enum.cpp:33:8: error: use of undeclared identifier 'B_1'

        a.a = B_1;

              ^

enum.cpp:34:8: error: use of undeclared identifier 'A_1'

        a.a = A_1;

              ^

enum.cpp:36:8: error: use of undeclared identifier 'A_1'

        b.b = A_1;

              ^

enum.cpp:37:8: error: use of undeclared identifier 'B_1'

        b.b = B_1;

              ^

4 errors generated. 


scope만 잡아주면.. public에서 선언한거라 문제없이 되는건가?

$ cat enum.cpp

#include <iostream>


class A

{

public:

        int a;

        enum

        {

                A_1,

                A_2,

                A_3

        };

};


class B

{

public:

        int b;

        enum

        {

                B_1,

                B_2,

                B_3

        };


};


int main()

{

        A a;

        B b;


        a.a = B::B_1;

        a.a = A::A_1;


        b.b = A::A_1;

        b.b = B::B_1;

        return 0;


$ g++ enum.cpp

$ clang --analyze enum.cpp 



enum 자체에 private를 줘보니..

에러 뿜뿜!

$ cat enum.cpp

#include <iostream>


class A

{

public:

        int a;


private:

        enum

        {

                A_1,

                A_2,

                A_3

        };

};


class B

{

public:

        int b;


private:

        enum

        {

                B_1,

                B_2,

                B_3

        };


};


int main()

{

        A a;

        B b;


        a.a = B::B_1;

        a.a = A::A_1;


        b.b = A::A_1;

        b.b = B::B_1;

        return 0;


$ g++ enum.cpp

enum.cpp: In function ‘int main()’:

enum.cpp:25:3: error: ‘B::<anonymous enum> B::B_1’ is private

enum.cpp:37:11: error: within this context

enum.cpp:11:3: error: ‘A::<anonymous enum> A::A_1’ is private

enum.cpp:38:11: error: within this context

enum.cpp:11:3: error: ‘A::<anonymous enum> A::A_1’ is private

enum.cpp:40:11: error: within this context

enum.cpp:25:3: error: ‘B::<anonymous enum> B::B_1’ is private

enum.cpp:41:11: error: within this context


$ clang --analyze enum.cpp

enum.cpp:37:11: error: 'B_1' is a private member of 'B'

        a.a = B::B_1;

                 ^

enum.cpp:25:3: note: declared private here

                B_1,

                ^

enum.cpp:38:11: error: 'A_1' is a private member of 'A'

        a.a = A::A_1;

                 ^

enum.cpp:11:3: note: declared private here

                A_1,

                ^

enum.cpp:40:11: error: 'A_1' is a private member of 'A'

        b.b = A::A_1;

                 ^

enum.cpp:11:3: note: declared private here

                A_1,

                ^

enum.cpp:41:11: error: 'B_1' is a private member of 'B'

        b.b = B::B_1;

                 ^

enum.cpp:25:3: note: declared private here

                B_1,

                ^

4 errors generated.


결론 

public일 경우 당연히(!) 다른 클래스에서도 사용 가능,

private일 때는 당연히(!) 다른 클래스에서는 사용 불가

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

객체지향과 if문?  (0) 2016.07.11
cpp 클래스 구성  (0) 2016.07.11
cpp enum in class  (0) 2016.07.01
cpp const  (0) 2016.06.22
const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
std::endl  (0) 2015.06.24
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2016.06.22 13:24

변수들에 붙는건 뻔하지만

const가 cpp에서 확장된 내용

멤버 함수일때 멤버 변수를 수정하지 못하도록 하는 기능 추가


return_type fuction_name(val ...) const


[링크 : http://blog.daum.net/coolprogramming/60]

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

cpp 클래스 구성  (0) 2016.07.11
cpp enum in class  (0) 2016.07.01
cpp const  (0) 2016.06.22
const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
std::endl  (0) 2015.06.24
c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2016.06.22 11:04

const 변수들의 경우 생성자(constructor)에서 초기화 불가능 하므로

(생성시에 이미 const로 만들어져 수정이 불가하니까)

문법적 허용을 위한 우회책으로 initializer 가 존재해야만 한다.


class Something

{

private:

    int m_value1;

    double m_value2;

    char m_value3;

 

public:

    Something() : m_value1(1), m_value2(2.2), m_value3('c') // directly initialize our member variables

    {

    // No need for assignment here

    }

 

    void print()

    {

         std::cout << "Something(" << m_value1 << ", " << m_value2 << ", " << m_value3 << ")\n";

    }

};

 

int main()

{

    Something something;

    something.print();

    return 0;

[링크 : http://www.learncpp.com/cpp-tutorial/8-5a-constructor-member-initializer-lists/]



[링크 : http://pacs.tistory.com/entry/C-클래스에서의-멤버-변수-멘버-함수의-상수화-const의-사용법]

[링크 : http://pacs.tistory.com/4] const란



+

처음에는 다중상속인줄... 망할 -_-

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

cpp enum in class  (0) 2016.07.01
cpp const  (0) 2016.06.22
const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
std::endl  (0) 2015.06.24
c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
functor / 펑터  (0) 2014.04.16
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2015.06.24 19:03

'\n' + fflush(stdout) 이라고 하면 되려나?


[링크 : http://www.cplusplus.com/reference/ostream/endl/]

[링크 : http://stackoverflow.com/questions/213907/c-stdendl-vs-n]

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

cpp const  (0) 2016.06.22
const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
std::endl  (0) 2015.06.24
c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
functor / 펑터  (0) 2014.04.16
cpp static 변수 및 메소드  (0) 2014.03.18
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2015.01.26 10:19

static_cast

dynamic_cast

reinterpret_cast

const_cast


c++에서 추가된 형변환 연산자로

c의 명시적 형변환은 유사성이 없는 자료간에도 형변환이 되어 논리오류가 발생할 수 있기 때문에

이러한 문제를 최소화/억제하기 위해 사용을 하지 않도록 권장하고

새로운 형 변환 연산자를 사용하도록 강조한다.


[링크 : http://warmz.tistory.com/881]

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

const 멤버 변수 초기화(member variable initializer)  (0) 2016.06.22
std::endl  (0) 2015.06.24
c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
functor / 펑터  (0) 2014.04.16
cpp static 변수 및 메소드  (0) 2014.03.18
cpp scope 연산자  (0) 2014.03.18
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014.04.16 17:14
펑터
c++의 객체중 컨스트럭터를 이용하여 마치 함수처럼 사용할 수 있는 객체를 의미하는데..
kdlp문서를 참고하여 고민을 해보니
동적 타입 바인딩일 통해(템플릿?) 타입에 특화되어 더욱 빠르게 타입별 inline으로 변환될 수 있는
특수한 형태의 클래스라고 생각이 되어진다.

[링크 : https://kldp.org/node/58727]
[링크 : http://printf.egloos.com/1807595]
[링크 : http://frompt.egloos.com/2415603]
[링크 : http://en.wikipedia.org/wiki/Function_object]
[링크 : http://en.wikipedia.org/wiki/Functor_(C++)]



람다
원래 함수언어에서 사용하던 녀석인데.. 여전히 멀하는 녀석인지 모르겠지만..
C++에서는 펑터로 사용하는게 귀찮아서 이를 더욱 간편하게 사용하는 용도로
이름이 없는 객체 식으로 운영되는걸로 들었는데... 써보질 않으니 알수가 없다. ㅠㅠ

[링크 : http://frompt.egloos.com/2767144

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

std::endl  (0) 2015.06.24
c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
functor / 펑터  (0) 2014.04.16
cpp static 변수 및 메소드  (0) 2014.03.18
cpp scope 연산자  (0) 2014.03.18
cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014.03.18 13:05
static 멤버 변수는 클래스 공용변수로 적용되며(global shared variable scope on class)
static 멤버 메소드는
객체로 생성하지 않아도(new) 실행이 가능한 함수이다.

일단.. static 멤버 변수는
아무래도... 공용데이터로 인해서 동기화나 데이터 의존성이 문제가 될 수 있으므로 되도록이면 안쓰는게 좋을것 같고
static 멤버 메소드는 instance 로 만들지 않고 객체 단위로 함수들을 정리할때 유용할 것으로 생각된다.

They cannot access nonstatic class member data using the member-selection operators (. or –>).
They cannot be declared as virtual.
They cannot have the same name as a nonstatic function that has the same argument types.

[링크 : http://msdn.microsoft.com/ko-kr/library/yyh8hetw.aspx] 멤버 메소드
[링크 : http://msdn.microsoft.com/ko-kr/library/s1sb61xd.aspx] 멤버 변수

함수 인자나 지역변수는 스택에 생성되고
static 변수는 data 영역에 선언되므로
data 영역에는 프로그램이 실행중에는 스택과 같이 임시로 사용되는게 아니기에 데이터가 유지되는 특징을 지닌다.

[링크 : http://sfixer.tistory.com/30

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

c++ 현변환 연산자(cast operator in c++)  (0) 2015.01.26
functor / 펑터  (0) 2014.04.16
cpp static 변수 및 메소드  (0) 2014.03.18
cpp scope 연산자  (0) 2014.03.18
cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
cpp 와 java의 차이점(문법)  (0) 2014.03.14
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014.03.18 10:11
cpp에 scope 연산자를 이용하면
클래스 내의 변수에 접근하는데 사용할 수 있으나 (class::variable 혹은 class::memberfunc)
클래스가 아닌 곳에서 그냥 ::만 사용할 경우 글로벌 변수를 접근할 수 있다.

int error;
void Error(int error)
{
    if(::error != 0) ; // global error
}
[링크 : http://www.pragsoft.com/books/CppEssentials.pdf] 62쪽

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

functor / 펑터  (0) 2014.04.16
cpp static 변수 및 메소드  (0) 2014.03.18
cpp scope 연산자  (0) 2014.03.18
cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
cpp 와 java의 차이점(문법)  (0) 2014.03.14
cpp 디폴트 매개변수  (0) 2014.03.12
Posted by 구차니

댓글을 달아 주세요

Programming/C++ STL2014.03.15 17:04
struct에서 변수값 주던가?
즉, class 역시 struct로 구현되기에 class 에 실제 값을 넣어줄 수 없다.

cpp는 c의 확장형이기에
멀 하던 c를 잊을수가 없네 ㅠㅠ 

아무튼 이렇기에
cpp class는 생성자에서 값을 초기화 하고
const형의 경우에는 member initialize list를 통해서 초기화 해주도록 한다. 

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

cpp static 변수 및 메소드  (0) 2014.03.18
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
Posted by 구차니

댓글을 달아 주세요