검색결과 리스트
분류 전체보기에 해당되는 글 23건
- 2011.11.03 delete 와 new
- 2011.11.03 C++ 생성자와 소멸자
- 2011.11.03 gtkmm 예제 프로그램
- 2011.11.03 virtual class
- 2011.11.03 C++ 상속
- 2011.11.03 프리미티브 타입
- 2011.11.02 C언어 키워드
- 2011.11.02 gtkmm! Anjuta!
- 2011.07.14 핑퐁 스크립트 1
- 2011.07.13 PHP와 세션
글
delete 와 new
프로그래밍
2011. 11. 3. 16:24
new는 객체를 메모리에 할당, delete는 할당된 객체를 삭제... 인듯 하다
그런데 new [] 와 delete[] 라는 키워드도 존재하는 듯하다.
좀더 자세히 풀어보면
new -> 객체 한개를 동적으로 할당하고 초기화
delete -> 할당된 객체 한개를 삭제
new [] -> 객체 배열을 동적으로 할당하고 초기화
delete [] -> 할당된 객체 배열 하나하나를 없애고 배열을 삭제
인듯 하다.
이렇게 new 와 new [] , delete 와 delete [] 키워드로 분리한 이유는
객체 하나의 정보만 저장한다면 배열의 갯수를 표현하는 부분이 필요 없으니까 그 부분을 절약하기 위해 그런듯하다.
new 연산자로 할당한건 객체만, new [] 연산은 배열 갯수 + 객체 X 갯수 로 표현하는듯.
그런데 new [] 와 delete[] 라는 키워드도 존재하는 듯하다.
좀더 자세히 풀어보면
new -> 객체 한개를 동적으로 할당하고 초기화
delete -> 할당된 객체 한개를 삭제
new [] -> 객체 배열을 동적으로 할당하고 초기화
delete [] -> 할당된 객체 배열 하나하나를 없애고 배열을 삭제
인듯 하다.
이렇게 new 와 new [] , delete 와 delete [] 키워드로 분리한 이유는
객체 하나의 정보만 저장한다면 배열의 갯수를 표현하는 부분이 필요 없으니까 그 부분을 절약하기 위해 그런듯하다.
new 연산자로 할당한건 객체만, new [] 연산은 배열 갯수 + 객체 X 갯수 로 표현하는듯.
'프로그래밍' 카테고리의 다른 글
예외처리 (0) | 2011.11.05 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
C++ 생성자와 소멸자
프로그래밍
2011. 11. 3. 14:09
생성자는 조금 들어봤는데 소멸자는 처음 들어봤다.
class A {
A() // 생성자
{
~~
}
~A() // 소멸자
{
~~
}
}
이런 형태로 쓰이는 거 같다
생성자는 객체를 생성할때, 소멸자는 객체를 없앨때(delete를 이용하는듯) 사용하나보다
class A {
A() // 생성자
{
~~
}
~A() // 소멸자
{
~~
}
}
이런 형태로 쓰이는 거 같다
생성자는 객체를 생성할때, 소멸자는 객체를 없앨때(delete를 이용하는듯) 사용하나보다
'프로그래밍' 카테고리의 다른 글
예외처리 (0) | 2011.11.05 |
---|---|
delete 와 new (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
gtkmm 예제 프로그램
프로그래밍/Gtk+/binding gtk
2011. 11. 3. 13:09
#include <gtkmm.h>
#include <iostream>
#include "config.h"
#ifdef ENABLE_NLS
# include <libintl.h>
#endif
Gtk::Window* main_win = 0;
/* For testing propose use the local (not installed) ui file */
/* #define UI_FILE PACKAGE_DATA_DIR"/gtk_test_1/ui/gtk_test_1.ui" */
#define UI_FILE "src/gtk_test_1.ui"
Glib::RefPtr<Gtk::Builder> builder;
Glib::ustring id;
Glib::ustring pass;
Gtk::Entry* idbox = 0;
Gtk::Entry* passbox = 0;
void destroy()
{
exit(0);
}
void debug_on_console()
{
printf("successed debug\n") ;
}
void test()
{
if(idbox)
{
id = idbox->get_text();
}
if(passbox)
{
pass = passbox->get_text();
}
if(id == "1234" && pass == "1234")
{
Gtk::MessageDialog dialog(*main_win,"로그인 성공!",false);
dialog.run();
}
else
{
}
}
int
main (int argc, char *argv[])
{
//pair < int , int > ttwa ;
Gtk::Main kit(argc, argv);
//Load the Glade file and instiate its widgets:
try
{
builder = Gtk::Builder::create_from_file(UI_FILE);
}
catch (const Glib::FileError & ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
builder->get_widget("main_window", main_win);
builder->get_widget("pwbox", passbox);
builder->get_widget("idbox", idbox);
if (main_win)
{
Gtk::Button* btnexit = 0;
Gtk::Button* btnok = 0;
Gtk::Button* btnclose = 0;
builder->get_widget("btnexit", btnexit);
if(btnexit)
{
btnexit->signal_clicked ().connect(sigc::ptr_fun (&destroy));
}
builder->get_widget("btnlogin", btnok);
if(btnok)
{
btnok->signal_clicked ().connect (sigc::ptr_fun(&test));
}
kit.run(*main_win);
}
return 0;
}
void testing()
{
printf("TEST");
}
Glade의 도움을 받아 UI를 작성하고 코드에서 불러오는 형태이다.
위에 나온거처럼 signal_type().connect(sigc::ptr_fun(&함수이름)); 의 형식으로 시그널과 함수를 이어주는 역활을 한다. 근데 이상하게 인자값이 존재하는 함수를 해봤을땐 에러가 나서 어떻게 값을 주고받지...하고 고민하다가 결국 Gtk::Entry와 Glib::ustring(Entry에서 텍스트를 뽑아오는 함수 get_text()의 리턴값이 Glib::ustring 이다)을 전역변수로 사용하는 길을 택했다.
기능은 login버튼을 눌렀을때 맨위 상자에 1234, 두번째 상자에도 1234라는 값이 있으면 다이얼로그를 띄우는 형식이다.
Glade의 도움을 받아 UI를 작성하고 코드에서 불러오는 형태이다.
위에 나온거처럼 signal_type().connect(sigc::ptr_fun(&함수이름)); 의 형식으로 시그널과 함수를 이어주는 역활을 한다. 근데 이상하게 인자값이 존재하는 함수를 해봤을땐 에러가 나서 어떻게 값을 주고받지...하고 고민하다가 결국 Gtk::Entry와 Glib::ustring(Entry에서 텍스트를 뽑아오는 함수 get_text()의 리턴값이 Glib::ustring 이다)을 전역변수로 사용하는 길을 택했다.
기능은 login버튼을 눌렀을때 맨위 상자에 1234, 두번째 상자에도 1234라는 값이 있으면 다이얼로그를 띄우는 형식이다.
'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글
본격 Gtk에서 Cairo 사용하기 (0) | 2011.11.15 |
---|---|
gtkmm! Anjuta! (0) | 2011.11.02 |
gtkbuilder의 사용 (0) | 2011.06.09 |
글
virtual class
프로그래밍
2011. 11. 3. 12:57
http://kldp.org/node/2182
http://www.winapi.co.kr/clec/cpp3/29-3-3.htm
c++에서
class A
{
int a;
}
class B : public A
{
int b;
}
class C : public A
{
int c;
}
class D : public B, public C
{
}
가 있다면
class D 안에서 a를 사용하면 어느쪽의 a인지 애매해진다. 또한 컴파일러가 에러를 내뱉는다.
이를
class B : virtual public A
class C : virtual public A
로 해주면 에러가 일어나지 않는다
이를 가상 기반 클래스 라고 부르는듯 하다. 이렇게 지정하면 두번 상속되더라도 한번만 상속을 하게 된다고 한다.
http://www.winapi.co.kr/clec/cpp3/29-3-3.htm
c++에서
class A
{
int a;
}
class B : public A
{
int b;
}
class C : public A
{
int c;
}
class D : public B, public C
{
}
가 있다면
class D 안에서 a를 사용하면 어느쪽의 a인지 애매해진다. 또한 컴파일러가 에러를 내뱉는다.
이를
class B : virtual public A
class C : virtual public A
로 해주면 에러가 일어나지 않는다
이를 가상 기반 클래스 라고 부르는듯 하다. 이렇게 지정하면 두번 상속되더라도 한번만 상속을 하게 된다고 한다.
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
C언어 키워드 (0) | 2011.11.02 |
글
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
C언어 키워드 (0) | 2011.11.02 |
글
뭔지 몰라서 검색!
latokor.egloos.com/987046
간단히 정리하자면
프리미티브 타입은 char, int, double 같은걸 말하는것 같다
latokor.egloos.com/987046
간단히 정리하자면
프리미티브 타입은 char, int, double 같은걸 말하는것 같다
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
C언어 키워드 (0) | 2011.11.02 |
글
오늘 여러 키워드에 대해 검색해봤다
먼저
extern.. 요놈은 걍 외부에서도 사용가능하게 지정하는 변수정도로만 알고 있었다.
그런데 extern "C"를 이용하면 컴파일러가 해주던 네임 맹글링(같은 이름의 함수와 변수를 구분가능하게 해주는 작업) 을 "안해주도록" 하여 일반 C함수이름으로 선언되게 하는거라고 한다.
한마디로 C++소스 내에서 exturn "C"로 덮혀있으면 C에서도 사용이 가능하게 되는것과 C++에서 C의 문법을 쓰게 해줄수 잇는것 같다.
그다음
volatile 이놈도 걍 컴파일러 최적화 안하기...정도로만 알고 있었는데 다음과 같은때에 쓴다고한다
a = 1;
a = 2;
a = 3;
a = 4;
a = 5;
같은식으로 되어있으면 컴파일러는 a = 5;만 수행하도록 할것이다(그것이 제일 효율적이니까) 그러나 만약 a대신에 값이 들어가는 것마다 다른것이 일어나는... 예를들면 인터럽트같은걸 사용할때는 값마다 수행하는게 다르고 1,2,3,4,5 처럼 각각 들어가는 값이 다르지만 다 수행되야한다면 나머지를 지울수 없게 될것이고 따라서 컴파일러 최적화를 수행못하게 하기 위해 volatile을 써야하게 된다는 것이다.
그리고 마지막으로 Null Pointer
널포인터, 걍 값없는거 아냐? 정도로만 생각했던 나에게 코웃음을 치며 제대로 모르는구나! 빨리 검색해봐! 라는 말에 검색하게 되었다.
#define NULL 0 으로 선언되어있다고 한다.(시스템마다 조금씩 틀릴것 같지만... 일단 내가본글에선 프로그래머가 NULL의 자세한 값을 알 필요가 없다는듯 하다.)
이 널포인터는 다른 포인터와 달리 0이란 값이 들어있고 "할당되지 않은 상태"라는 듯하다.
Gtk를 알려면 포인터를 제대로 알아야한다는 말을 듣고 포인터관련 자료를 찾고 정리하는 시간을 가져봐야겠다.
먼저
extern.. 요놈은 걍 외부에서도 사용가능하게 지정하는 변수정도로만 알고 있었다.
그런데 extern "C"를 이용하면 컴파일러가 해주던 네임 맹글링(같은 이름의 함수와 변수를 구분가능하게 해주는 작업) 을 "안해주도록" 하여 일반 C함수이름으로 선언되게 하는거라고 한다.
한마디로 C++소스 내에서 exturn "C"로 덮혀있으면 C에서도 사용이 가능하게 되는것과 C++에서 C의 문법을 쓰게 해줄수 잇는것 같다.
그다음
volatile 이놈도 걍 컴파일러 최적화 안하기...정도로만 알고 있었는데 다음과 같은때에 쓴다고한다
a = 1;
a = 2;
a = 3;
a = 4;
a = 5;
같은식으로 되어있으면 컴파일러는 a = 5;만 수행하도록 할것이다(그것이 제일 효율적이니까) 그러나 만약 a대신에 값이 들어가는 것마다 다른것이 일어나는... 예를들면 인터럽트같은걸 사용할때는 값마다 수행하는게 다르고 1,2,3,4,5 처럼 각각 들어가는 값이 다르지만 다 수행되야한다면 나머지를 지울수 없게 될것이고 따라서 컴파일러 최적화를 수행못하게 하기 위해 volatile을 써야하게 된다는 것이다.
그리고 마지막으로 Null Pointer
널포인터, 걍 값없는거 아냐? 정도로만 생각했던 나에게 코웃음을 치며 제대로 모르는구나! 빨리 검색해봐! 라는 말에 검색하게 되었다.
#define NULL 0 으로 선언되어있다고 한다.(시스템마다 조금씩 틀릴것 같지만... 일단 내가본글에선 프로그래머가 NULL의 자세한 값을 알 필요가 없다는듯 하다.)
이 널포인터는 다른 포인터와 달리 0이란 값이 들어있고 "할당되지 않은 상태"라는 듯하다.
Gtk를 알려면 포인터를 제대로 알아야한다는 말을 듣고 포인터관련 자료를 찾고 정리하는 시간을 가져봐야겠다.
'프로그래밍' 카테고리의 다른 글
delete 와 new (0) | 2011.11.03 |
---|---|
C++ 생성자와 소멸자 (0) | 2011.11.03 |
virtual class (0) | 2011.11.03 |
C++ 상속 (0) | 2011.11.03 |
프리미티브 타입 (0) | 2011.11.03 |
글
gtkmm! Anjuta!
프로그래밍/Gtk+/binding gtk
2011. 11. 2. 19:21
C++로 바인딩된 Gtk언어 gtkmm.
C++공부삼아 해보기로 결심했다.
Class, Public, Protected, Private, Vitual... 객체지향의 개념이 추가된 C...라는 느낌이기보단 C랑 많이 다르다는 느낌이 들었다.
Virtual이란 키워드... 가상함수? 자바의 abstract 과 비슷한 키워드인듯 하다.
Anjuta IDE라는 gtk개발툴. 몇개월전만 해도 별로였던거 같은데 제법 쓸만한 툴이 되었다.
glade랑 통합되어서 UI는 비주얼스튜디오의 도구상자처럼 Label이나 Button을 끌어다 디자인을 할 수 있다.
그다음 소스코드에서 불러와서 사용하면 끗!
제법 쓸만한 툴이 생긴거 같아서 기쁘다.
열심히 개발해야징 히힛.
C++공부삼아 해보기로 결심했다.
Class, Public, Protected, Private, Vitual... 객체지향의 개념이 추가된 C...라는 느낌이기보단 C랑 많이 다르다는 느낌이 들었다.
Virtual이란 키워드... 가상함수? 자바의 abstract 과 비슷한 키워드인듯 하다.
Anjuta IDE라는 gtk개발툴. 몇개월전만 해도 별로였던거 같은데 제법 쓸만한 툴이 되었다.
glade랑 통합되어서 UI는 비주얼스튜디오의 도구상자처럼 Label이나 Button을 끌어다 디자인을 할 수 있다.
그다음 소스코드에서 불러와서 사용하면 끗!
제법 쓸만한 툴이 생긴거 같아서 기쁘다.
열심히 개발해야징 히힛.
'프로그래밍 > Gtk+/binding gtk' 카테고리의 다른 글
본격 Gtk에서 Cairo 사용하기 (0) | 2011.11.15 |
---|---|
gtkmm 예제 프로그램 (0) | 2011.11.03 |
gtkbuilder의 사용 (0) | 2011.06.09 |
글
심심해서 만들어본 쉘스크립트.
쉘스크립트 내에서 반복하는 반복문 안에다가 '핑!'을 출력하고 1초쉬고 '퐁!'을 입력하고 1초 쉬는 스크립트다. 그리고 그것을 계속 반복한다
#!/bin/bash
num=0
while (( $num < 1 ))
do
echo "핑!"
sleep 1
echo "퐁!"
sleep 1
done
참고로 #!/bin/bash 부분을 #!/bin/sh 로 바꾸면 실행이 안된다... 어째서일까...
쉘스크립트 내에서 반복하는 반복문 안에다가 '핑!'을 출력하고 1초쉬고 '퐁!'을 입력하고 1초 쉬는 스크립트다. 그리고 그것을 계속 반복한다
#!/bin/bash
num=0
while (( $num < 1 ))
do
echo "핑!"
sleep 1
echo "퐁!"
sleep 1
done
참고로 #!/bin/bash 부분을 #!/bin/sh 로 바꾸면 실행이 안된다... 어째서일까...
'기타' 카테고리의 다른 글
헝가리안 표기법! (0) | 2011.11.08 |
---|---|
Nateon Client (0) | 2011.11.07 |
Lingr API 의 문제점 (0) | 2011.11.04 |
ざわざわ (0) | 2011.06.07 |
잡담 여러개 (0) | 2011.06.04 |
글
PHP와 세션
프로그래밍/PHP/Javascript(WEB)
2011. 7. 13. 21:07
간략하게 보자면 session_start(); 로 시작해서 session_destroy(); 로 끝나는 것 같다.
한 PHP 페이지 안에 꼭 session_destroy();가 들어갈 필요는 없는 것 같다.
세션이 닫히는것과 없어지는 것에 대한 궁금증 생겨서 이런저런 실험을 해보았다.
cat ./set1.php
<?
session_id('chat');
session_start();
$_SESSION['test'] = "HEHEHE THIS IS TEST!";
print_r($_SESSION['test']);
var_dump($_SESSION);
//echo($_SESSION['test']);
echo("<br>set1 : ". $_SESSION['test']."<br>");
//session_destroy();
?>
cat ./set6.php
<?
require('set1.php');
$_SESSION = array();
echo("<br>set6 : ". $_SESSION['test'] . "<br>")
?>
cat ./set7.php
<?
require('set6.php');
var_dump($_SESSION['test']);
echo("<br>set7 : " . $_SESSION['test'] ."<br>");
?>
위 상태에서 set7.php 사이트에 들어가면(물론 set1.php, set6.php, set7.php는 같은 폴더안에 있다)
HEHEHE THIS IS TEST!array(1) { ["test"]=> string(20) "HEHEHE THIS IS TEST!" }
set1 : HEHEHE THIS IS TEST!
Notice: Undefined index: test in /opt/lampp/htdocs/set6.php on line 4
set6 :
Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 3
NULL
Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 4
set7 :
라고 나온다.
즉 set1부분에서는 세션이 시작되고 test라는 이름의 세션을 추가한뒤 set6.php부분에서는 세션변수에 대해 배열 초기화가 일어나 test라는 이름의 세션이 사라져서 아무것도 없게 되는 것 같다.
그리고 session_id 라는 놈을 이용해 세션을 공유할수도 있는 것 같다. 세션을 저장하는 위치도 지정할수 있는 함수가 있었지만 직접 실험해보지는 않았다.
세션 아직은 많이 어렵다 ㅠㅠ
한 PHP 페이지 안에 꼭 session_destroy();가 들어갈 필요는 없는 것 같다.
세션이 닫히는것과 없어지는 것에 대한 궁금증 생겨서 이런저런 실험을 해보았다.
cat ./set1.php
<?
session_id('chat');
session_start();
$_SESSION['test'] = "HEHEHE THIS IS TEST!";
print_r($_SESSION['test']);
var_dump($_SESSION);
//echo($_SESSION['test']);
echo("<br>set1 : ". $_SESSION['test']."<br>");
//session_destroy();
?>
cat ./set6.php
<?
require('set1.php');
$_SESSION = array();
echo("<br>set6 : ". $_SESSION['test'] . "<br>")
?>
cat ./set7.php
<?
require('set6.php');
var_dump($_SESSION['test']);
echo("<br>set7 : " . $_SESSION['test'] ."<br>");
?>
위 상태에서 set7.php 사이트에 들어가면(물론 set1.php, set6.php, set7.php는 같은 폴더안에 있다)
HEHEHE THIS IS TEST!array(1) { ["test"]=> string(20) "HEHEHE THIS IS TEST!" }
set1 : HEHEHE THIS IS TEST!
Notice: Undefined index: test in /opt/lampp/htdocs/set6.php on line 4
set6 :
Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 3
NULL
Notice: Undefined index: test in /opt/lampp/htdocs/set7.php on line 4
set7 :
라고 나온다.
즉 set1부분에서는 세션이 시작되고 test라는 이름의 세션을 추가한뒤 set6.php부분에서는 세션변수에 대해 배열 초기화가 일어나 test라는 이름의 세션이 사라져서 아무것도 없게 되는 것 같다.
그리고 session_id 라는 놈을 이용해 세션을 공유할수도 있는 것 같다. 세션을 저장하는 위치도 지정할수 있는 함수가 있었지만 직접 실험해보지는 않았다.
세션 아직은 많이 어렵다 ㅠㅠ