'분류 전체보기'에 해당되는 글 84건
- 2010.06.12 구조체
- 2010.06.12 vim 사용법
- 2010.06.10 Qt Creator Manual
- 2010.06.10 c++ 0610
- 2010.06.09 버블 정렬 c 0609
- 2010.06.08 다중포인터
- 2010.06.08 c++0608
- 2010.06.06 Qt Compile
- 2010.06.06 16진수 0xffffffff의 값 (signed and unsigned)
- 2010.06.06 형식 지정자
'C' 카테고리의 다른 글
포인터 상수 (0) | 2010.06.24 |
---|---|
문자열 (0) | 2010.06.13 |
버블 정렬 c 0609 (0) | 2010.06.09 |
다중포인터 (0) | 2010.06.08 |
16진수 0xffffffff의 값 (signed and unsigned) (0) | 2010.06.06 |
#설치
우분투 :
$ sudo apt-get install vim
윈도우 :
Download path :
'VIM 강좌' 카테고리의 다른 글
용어 tabstop shiftwidth (0) | 2010.08.23 |
---|---|
folding (0) | 2010.08.15 |
ctags & cscope (0) | 2010.08.15 |
[File] - New File or Project... Ctrl+N
Projects
Qt4 Gui Application Introduction and project location Name: test Create in: Project Next click! Select required modules Next click! Class Information Class name: MyTest Base class: QWidget Header file: mytest.h Source file: mytest.cpp Generate form: non-checked Form file: Inactive Next click! Project management Finish click! Projects ├test.pro ---------- 프로젝트 정보를 담고 있는 파일. Qt Creator에서 컴파일하려면 반드시 프로젝트를 생성해야 함. ├Headers ----------- 헤더 파일 폴더 │ └mytest.h -------- mytest 클래스의 헤더 파일
└Sources ----------- 소스 파일 폴더 ├main.cpp -------- main() 함수가 구현된 소스 파일
└mytest.cpp ------ mytest 클래스 소스 파일
└
─ │├
'Qt' 카테고리의 다른 글
qt 메뉴 등록 (0) | 2010.09.23 |
---|---|
[Qt Designer] 확장 다이얼로그 (0) | 2010.09.22 |
Qt Designer (0) | 2010.09.18 |
Qt Compile (0) | 2010.06.06 |
같은 이름의 함수를 여러 개 쓸 수 있다.
C는 함수의 이름으로만 심볼을 생성하기 때문에 동일한 이름의 함수를 사용할 수 없다.
C++는 함수의 이름에 시그니처(매개변수의 타입과 갯수, 리턴 타입은 포함되지 않음)에 대한 정보를 추가하여 심볼을 생성하기 때문에 동일한 이름의 함수를 사용할 수 있다.
오버로딩이 가능한 경우
1. 매개변수 갯수는 같지만 타입이 다른 경우
2. 매개변수 타입은 같지만 갯수가 다른 경우
오버로딩이 불가능한 경우
1. 두 함수의 매개변수가 각각 일반 자료형, 레퍼런스형인 경우 이 둘의 실인자의 구별이 불가능하다.
2. 두 함수의 리턴 타입만 다른 경우 이 둘의 실인자의 구별이 불가능하다.
함수 찾는 순서
1. Exact Match
2. Promotion
3. Standard Conversions
4. User-defined Conversions
#디폴트 인자
디폴트 인자는 항상 오른쪽부터 설정한다. 그래야만 함수의 인자들을 왼쪽부터 넣어도 문제가 없다.
오버로딩과 디폴트 인자의 충돌
void Ambiguous(int a, int b = 100);
void Ambiguous(int a);
void Ambiguous(10);
#동적 메모리 할당
컴파일 타임에는 크기를 알 수 없으며, 런 타임에 할당할 메모리의 크기가 결정되어 할당하는 방식
할당과 해제의 시점이 자유롭다.
함수 내에서 할당한 경우, 함수가 종료되더라도 Heap 영역에 남아있다.
Data 영역 - 전역 변수, Static 변수가 할당된다. 프로그램 시작시 할당, 프로그램 종료시 해제.
BBS 영역 - Data 영역에 포함된 영역. 초기화하지 않은 전역 변수가 할당된다.
Heap 영역 - 동적 할당에 사용되는 메모리
Stack 영역 - 지역변수가 할당된다. 함수 시작시 할당, 함수 종료시 해제.
main() 함수가 아닌 다른 함수에서 동적메모리를 할당하고 해제하지 않은 경우에는 반드시 그 포인터 변수를 main() 함수로 넘겨주어야 메모리 해제가 가능하다??
ㄹㄹ
ㄹㄹ
버블 정렬
Output: |
#include <stdio.h> int main() { int i, j; int array[3][4] = { {15, 23, 45, 56}, {34, 53, 76, 23}, {98, 29, 48, 43}}; int *p = *array; for (i = 0; i < 12; ++i) { printf("%d ", *(p+i)); } printf("\n"); return 0; } |
배열과 포인터 값과 주소 관계
Output: |
다중포인터
#include <stdio.h> int main() { int i = 100; int *p = &i; int **pp = &p; int ***ppp = &pp; printf(" i = 100; --> i = %d\n", i); *p = 90; printf(" *p = 90; --> i = %d\n", i); **pp = 80; printf(" **pp = 80; --> i = %d\n", i); ***ppp = 70; printf("***ppp = 70; --> i = %d\n", i); return 0; } Result-------------------------------------------------------------------------------------------------------------- i = 100; --> i = 100 *p = 90; --> i = 90 **pp = 80; --> i = 80 ***ppp = 70; --> i = 70 Result-------------------------------------------------------------------------------------------------------------- |
'C' 카테고리의 다른 글
구조체 (0) | 2010.06.12 |
---|---|
버블 정렬 c 0609 (0) | 2010.06.09 |
16진수 0xffffffff의 값 (signed and unsigned) (0) | 2010.06.06 |
형식 지정자 (0) | 2010.06.06 |
상수의 표기 (0) | 2010.06.06 |
#namespace
하나의 프로그램에 같은 이름의 변수, 함수, 클래스 등이 있으면 안된다.
이러한 것을 막기 위해 namespace를 사용한다.
main() 함수 위에 선언되어 있어야 한다.
정의
namespace NAME
{
변수, 함수, 클래스 정의
...
}
namespace를 정의한 후 그 안에 포함된 것을 사용하기 위해서는
NAME::변수, NAME::함수, NAME::클래스 등과 같이 사용한다.
1) 개별적으로 줄여서 사용하는 방법
using NAME::myfunc;
2) 네임스페이스 자체를 기본으로 설정
using namespace NAME;
#include <iostream> using namespace std; namespace A { void showTest() { cout << "namespace A test" << endl; } } namespace B { void showTest() { cout << "namespace B test" << endl; } } using B::showTest; int main() { A::showTest(); showTest(); return 0; } Result-------------------------------------------------------------------------------------------------------------- namespace A test namespace B test Result-------------------------------------------------------------------------------------------------------------- |
레퍼런스
변수의 별명, 변수처럼 사용
포인터는 메모리가 할당되나 레퍼런스는 메모리가 할당되지 않고 해당변수의 별명으로만 추가될 뿐이다.
반드시 초기화해야 하며, 초기화 시에 상수를 대입할 수 없다.
한 번 초기화하면 초기화 시에 대입했던 변수 이외의 변수의 별명으로 바뀌지 않는다.
Qt Compile (Windows)
>qmake -project
>qmake main.pro
>mingw32-make
예제1) Hello Qt!
#include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton hello("Hello world!"); hello.resize(100, 30); hello.show(); return app.exec(); } |
예제2) Quit
#include <QApplication> #include <QFont> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton quit("Quit"); quit.resize(75, 30); quit.setFont(QFont("Times", 18, QFont::Bold)); QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); quit.show(); return app.exec(); } |
예제3) QWidget
#include <QApplication> #include <QFont> #include <QPushButton> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; window.resize(200, 120); QPushButton quit("Quit", &window); quit.setFont(QFont("Times", 18, QFont::Bold)); quit.setGeometry(10, 40, 180, 40); QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit())); window.show(); return app.exec(); } |
예제4) MyWidget
#include <QApplication> #include <QFont> #include <QPushButton> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(200, 120); QPushButton *quit = new QPushButton("Quit", this); quit->setGeometry(62, 40, 75, 30); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } |
예제5) LCD display
#include <QApplication> #include <QFont> #include <QLCDNumber> #include <QPushButton> #include <QSlider> #include <QVBoxLayout> #include <QWidget> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QPushButton *quit = new QPushButton("Quit"); quit->setFont(QFont("Times", 18, QFont::Bold)); QLCDNumber *lcd = new QLCDNumber(2); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 99); slider->setValue(0); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(quit); layout->addWidget(lcd); layout->addWidget(slider); setLayout(layout); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } |
예제6) Layout
#include <QApplication> #include <QFont> #include <QGridLayout> #include <QLCDNumber> #include <QPushButton> #include <QSlider> #include <QVBoxLayout> #include <QWidget> class LCDRange : public QWidget { public: LCDRange(QWidget *parent = 0); }; LCDRange::LCDRange(QWidget *parent) : QWidget(parent) { QLCDNumber *lcd = new QLCDNumber(2); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 99); slider->setValue(0); connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(lcd); layout->addWidget(slider); setLayout(layout); } class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QPushButton *quit = new QPushButton("Quit"); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); QGridLayout *grid = new QGridLayout; for (int row = 0; row < 4; ++row) { for (int column = 0; column < 4; ++column) { grid->addWidget(new LCDRange, row, column); } } QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(quit); layout->addLayout(grid); setLayout(layout); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } |
'Qt' 카테고리의 다른 글
qt 메뉴 등록 (0) | 2010.09.23 |
---|---|
[Qt Designer] 확장 다이얼로그 (0) | 2010.09.22 |
Qt Designer (0) | 2010.09.18 |
Qt Creator Manual (0) | 2010.06.10 |
#include <stdio.h> int main() { int inum; inum = 0xffffffff; printf("%8s %8s %10s\n", "hexa", "type", "decimal"); printf("%8x : %8s %10d\n", inum, "signed", inum); printf("%8x : %8s %10u\n", inum, "unsigned", inum); return 0; } |
RESULT------------------------------------------------------------------------------------------------------------- hexa type decimal ffffffff : signed -1 ffffffff : unsigned 4294967295 RESULT------------------------------------------------------------------------------------------------------------- |
'C' 카테고리의 다른 글
버블 정렬 c 0609 (0) | 2010.06.09 |
---|---|
다중포인터 (0) | 2010.06.08 |
형식 지정자 (0) | 2010.06.06 |
상수의 표기 (0) | 2010.06.06 |
sizeof 연산자를 이용한 Data Type 크기 확인 (0) | 2010.06.06 |
printf() | scanf() | 형식 |
%c | %c | 단일 문자 |
%s | %s | 문자열 |
%d | %d | 부호있는 정수 |
%i | 부호있는 정수 | |
%i | 10진수, 8진수, 16진수 | |
%f | %f | 실수 (십진 표기) |
%e | %e | 실수 (지수 표기) |
%g | 실수 | |
%u | %u | 부호없는 정수 |
%x | %x | 부호없는 16진수 |
%o | %o | 부호없는 8진수 |
%p | 16진수 메모리 주소 |
printf() | 형식 | |
%ld | long int | |
%hd | short int | |
%lo | long int 8진수 | |
%lx | long int 16진수 | |
%u | unsigned int | |
%lu | unsigned long int | |
%lf | double | |
%Lf | long double |
'C' 카테고리의 다른 글
다중포인터 (0) | 2010.06.08 |
---|---|
16진수 0xffffffff의 값 (signed and unsigned) (0) | 2010.06.06 |
상수의 표기 (0) | 2010.06.06 |
sizeof 연산자를 이용한 Data Type 크기 확인 (0) | 2010.06.06 |
Data type 사이의 대입 및 출력 형식 (0) | 2010.06.05 |