#include <iostream>
using namespace std;
int main() {
cout <<"Starting program..." << flush; // 나머지 버퍼(메모리) 정리
cout << "This is some test." << endl;
cout << "Banana." << "Apple." << "Orange." << endl;
cout << "Banana." " " << "Apple." " " << "Orange." << endl;
cout << "Banana. " << "Apple. " << "Orange. " << endl;
cout << "This is more some test." << endl;
return 0;
}
카테고리
asm
(27)
bootloader_x86_grub
(1)
C
(92)
compile
(11)
config
(76)
CPP
(13)
CSS
(1)
debugging
(7)
gimp
(1)
Go
(1)
html
(1)
Java
(1)
JavaScript
(1)
kernel
(19)
LibreOffice
(3)
Linux system progamming
(21)
MFC
(1)
opencv
(4)
OpenGL
(1)
PHP
(1)
Python
(4)
qemu
(29)
shell
(3)
socket
(7)
troubleshooting
(2)
ubuntu18.04
(2)
windows
(1)
2018/12/05
OOP 다향성
다향성
다형성 = 하나 이상의 형식을 취하는 능력
(객체에는 두 가지 이상의 유형이 있다)
- 부모 인터페이스를 통해 클래스를 사용할 수 있다.
- 자식 클래스는 부모 클래스의 일부 동작을 재정의 할 수 있다.
다형성은 추상 동작을 정의하고 사용할 수 있게 해준다.
- 추상 동작은 기본 클래스의 인터페이스에서 정의되며 하위 클래스에서 구현된다.
- 추상 또는 가상으로 선언
단어 하나의 각기 다른 해석.
Example 1
int main(){
Rectangle rect;
Triangle trgl;
Polygon * ppoly1 = ▭
Polygon * ppoly2 = &trgl;
pply1->set_values (4,5);
pply2->set_values (4,5);
cout << rect.area() << '\n';
cout << trgl.area() << '\n';
return 0;
}
#include <iostream>
usnig namespace std;
class Polygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{width=a; height=b; }
};
class Rectangle: public Polygon {
public:
int area()
{return width*height:}
};
class Triangle: public Polygon {
public:
int area()
{ return width*height/2; }
};
다형성 = 하나 이상의 형식을 취하는 능력
(객체에는 두 가지 이상의 유형이 있다)
- 부모 인터페이스를 통해 클래스를 사용할 수 있다.
- 자식 클래스는 부모 클래스의 일부 동작을 재정의 할 수 있다.
다형성은 추상 동작을 정의하고 사용할 수 있게 해준다.
- 추상 동작은 기본 클래스의 인터페이스에서 정의되며 하위 클래스에서 구현된다.
- 추상 또는 가상으로 선언
단어 하나의 각기 다른 해석.
Example 1
int main(){
Rectangle rect;
Triangle trgl;
Polygon * ppoly1 = ▭
Polygon * ppoly2 = &trgl;
pply1->set_values (4,5);
pply2->set_values (4,5);
cout << rect.area() << '\n';
cout << trgl.area() << '\n';
return 0;
}
#include <iostream>
usnig namespace std;
class Polygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{width=a; height=b; }
};
class Rectangle: public Polygon {
public:
int area()
{return width*height:}
};
class Triangle: public Polygon {
public:
int area()
{ return width*height/2; }
};
OOP 추상화
추상화
추상화는 일반화의 한 방법이다.
- 관련없는 기능, 속성 또는 기능을 무시하고 관련 기능을 강조한다.
추상화 = 복잡성 관리
- 단순화 된 모델에 대한 복잡한 현실을 표현할 수 있다.
인터페이스 추상화 제공
- 그것을 사용하는 방법 만 알면된다.
- 내부 구현을 알 필요 없다.
객체의 추상화는 필요로하는 것만을 유지한다.
- 물건을 보면서 의미있는 것을 본다.
- 추상화는 필요한 실재의 속성을 강조 표시하고 다른 실재를 숨 긴다.
Example 1
int main()
{
Adder a;
a.addnum(10);
a.addNum(20);
a.addNum(30);
count << "Total " << a.getTotal() <<endl;
return 0;
}
#include <iostream>
unsing namespace std;
class Adder{
public:
// 생성자
Adder(int i = 0){
total = i;
}
//interface to outside world
void addNum(int number){
total += number;
}
//interface to outside world
int getTotal(){
return total;
};
private:
// hidden data from outside world
int total;
};
추상화는 일반화의 한 방법이다.
- 관련없는 기능, 속성 또는 기능을 무시하고 관련 기능을 강조한다.
추상화 = 복잡성 관리
- 단순화 된 모델에 대한 복잡한 현실을 표현할 수 있다.
인터페이스 추상화 제공
- 그것을 사용하는 방법 만 알면된다.
- 내부 구현을 알 필요 없다.
객체의 추상화는 필요로하는 것만을 유지한다.
- 물건을 보면서 의미있는 것을 본다.
- 추상화는 필요한 실재의 속성을 강조 표시하고 다른 실재를 숨 긴다.
Example 1
int main()
{
Adder a;
a.addnum(10);
a.addNum(20);
a.addNum(30);
count << "Total " << a.getTotal() <<endl;
return 0;
}
#include <iostream>
unsing namespace std;
class Adder{
public:
// 생성자
Adder(int i = 0){
total = i;
}
//interface to outside world
void addNum(int number){
total += number;
}
//interface to outside world
int getTotal(){
return total;
};
private:
// hidden data from outside world
int total;
};
OOP 계승
계승
하위 클래스는 상위 클래스의 특성을 상속한다.
- 속성(필드 및 속성)
- 운영(방법)
하위 클래스는 상위 클래스를 확장 할 수 있다.
- 새 필드 및 메소드 추가
- 메서드 재정의(기존 동작 수정)
상속에는 많은 이점이 있습니다.
- 확장 성
- 재사용 성
- 추상화 제공
- 중복 코드 제거
Base Class == Parent Class
Derived class == child class
동일한 표현이다.
파생 클래스의 이름 뒤에 기본 클래스의 이름을 지정한다.
public class shape
{...}
public class Circle(자식 프로세스 이름) : shape(부모 프로세스 이름)
{...}
부모 자식 관계 성립
파생 클래스의 생성자에서는 base라는 키워드를 사용하여 base 클래스의 생성자를 호출한다.
public Circle (int x, int y) : base(x)
{...}
Example 1
class Emplyee {
public:
Employee(string theName, float thePayRate); // 함수 선언
string getName(); // 함수 선언
float getPayRate(); // 함수 선언
float pay(float hoursWorked); //함수 선언
Protected: // 데이터 멤버 선언
string name;
float payRate;
};
Employee::Employee(string theName, float thePayRate) // 소속클래스::멤버 함수 정의
{
name = theName;
payRate = thePayRate;
}
string Employee::getName() // 소속클래스::멤버 함수 정의
{
return name;
}
float Employee::getPayRate() // 소속클래스::멤버 함수 정의
{
return payRate;
}
float Employee::pay(float hoursWorked) // 소속클래스::멤버 함수 정의
{
return hoursWorked * payRate;
}
Example 2 (no reuse) 재 사용하지 않고 독립적으로 따로 만든 예제.
class Manager {
public:
Manager(string theName, float thePayRate, bool isSalaried)
string getName();
float getPayRate();
bool getSalaried();
float pay(float hoursWorked);
Protected:
string name;
float payRate;
bool salaried;
};
Manager::Manager(string theName, float thePayRate, bool isSalaried) {
name = theName;
payRate = thePayRate;
salaried = isSalaried;
}
string Manager::getName(){
return name;
}
float Manager::getPayRate()
{
return payRate;
}
bool Manager::getSalaried()
{
return salaried;
}
float Manager::pay(float hoursWorked)
{
if (salaried)
return payRate;
/* else */
return hoursWorked * payRate;
}
Example (with reuse) 재 사용 하는 예제, OOP의 언어를 최대한 사용한 예제.
class Employee {
public:
Employee(string theName, float thePayRate);
string getName();
float getPayRate();
float pay(float hoursWorked);
protected:
string name;
float payRate;
};
#include "employee.h"
class Manager : public Employee {
public:
Manager(string theName, float thePayRate, bool isSalaried);
bool getSalaried();
float pay(float hoursWorked);
protected:
bool salaried;
};
하위 클래스는 상위 클래스의 특성을 상속한다.
- 속성(필드 및 속성)
- 운영(방법)
하위 클래스는 상위 클래스를 확장 할 수 있다.
- 새 필드 및 메소드 추가
- 메서드 재정의(기존 동작 수정)
상속에는 많은 이점이 있습니다.
- 확장 성
- 재사용 성
- 추상화 제공
- 중복 코드 제거
Base Class == Parent Class
Derived class == child class
동일한 표현이다.
파생 클래스의 이름 뒤에 기본 클래스의 이름을 지정한다.
public class shape
{...}
public class Circle(자식 프로세스 이름) : shape(부모 프로세스 이름)
{...}
부모 자식 관계 성립
파생 클래스의 생성자에서는 base라는 키워드를 사용하여 base 클래스의 생성자를 호출한다.
public Circle (int x, int y) : base(x)
{...}
Example 1
class Emplyee {
public:
Employee(string theName, float thePayRate); // 함수 선언
string getName(); // 함수 선언
float getPayRate(); // 함수 선언
float pay(float hoursWorked); //함수 선언
Protected: // 데이터 멤버 선언
string name;
float payRate;
};
Employee::Employee(string theName, float thePayRate) // 소속클래스::멤버 함수 정의
{
name = theName;
payRate = thePayRate;
}
string Employee::getName() // 소속클래스::멤버 함수 정의
{
return name;
}
float Employee::getPayRate() // 소속클래스::멤버 함수 정의
{
return payRate;
}
float Employee::pay(float hoursWorked) // 소속클래스::멤버 함수 정의
{
return hoursWorked * payRate;
}
Example 2 (no reuse) 재 사용하지 않고 독립적으로 따로 만든 예제.
class Manager {
public:
Manager(string theName, float thePayRate, bool isSalaried)
string getName();
float getPayRate();
bool getSalaried();
float pay(float hoursWorked);
Protected:
string name;
float payRate;
bool salaried;
};
Manager::Manager(string theName, float thePayRate, bool isSalaried) {
name = theName;
payRate = thePayRate;
salaried = isSalaried;
}
string Manager::getName(){
return name;
}
float Manager::getPayRate()
{
return payRate;
}
bool Manager::getSalaried()
{
return salaried;
}
float Manager::pay(float hoursWorked)
{
if (salaried)
return payRate;
/* else */
return hoursWorked * payRate;
}
Example (with reuse) 재 사용 하는 예제, OOP의 언어를 최대한 사용한 예제.
class Employee {
public:
Employee(string theName, float thePayRate);
string getName();
float getPayRate();
float pay(float hoursWorked);
protected:
string name;
float payRate;
};
#include "employee.h"
class Manager : public Employee {
public:
Manager(string theName, float thePayRate, bool isSalaried);
bool getSalaried();
float pay(float hoursWorked);
protected:
bool salaried;
};
ubuntu 18.04 cdt eclipse Project create and Compile
프로젝트 생성.
File -> c/C++ Project -> C++ Managed Build
Projectname:Cpp01
선택
Project type:
HelloWorldC++ Project
Toolchains:
Linux GCC
Next 클릭
Author : Jang
Finish 버튼 클릭
Next 클릭
Configurations:
Debug
Release
체크
Finsh 클릭
Debug Compile
1. 프로젝트 빌드
Project -> Build Project 또는 Build All
단축키: Ctrl + B
1.1 C++ Managed Build 빌드 설정 위치
Window-> Preferences
C/C++ -> Build -> Environment
1.2 Makefile Project
Window-> Preferences
C/C++ -> Makefile Pages settings
2. 실행
Run -> Run
단축키 : Ctrl + F11
2.1 Launch failed. Binary not found.
바이너리 파일 경로 설정
Run -> Run Configurations
C/C++ Application
Project: Cpp01
C/C++Application:
Debug/Cpp01 ---> 경로 설정 Browse 클릭
Apply
Run
Console 창
!!!Hello World!!!
Release Compile
1. Project -> Build Configuration -> Set Active -> Release 선택
2. 프로젝트 빌드
Project -> Build Project 또는 Build All
단축키: Ctrl + B
3. Run -> Run
단축키 : Ctrl + F11
터미널 실행 방법
1. 소스 위치 확인 방법
화면 구성 왼쪽 창 마우수 좌표 이동
Cpp01 오른쪽 마우스 클릭 -> Properties 선택
Location: 프로젝트 경로 드래그 복사
2. 터미널 실행 ctrl + art + t
cd ~/eclipse-workspace/Cpp01/Debug
./Cpp01
cd ~/eclipse-workspace/Cpp01/Release
./Cpp01
File -> c/C++ Project -> C++ Managed Build
Projectname:Cpp01
선택
Project type:
HelloWorldC++ Project
Toolchains:
Linux GCC
Next 클릭
Author : Jang
Finish 버튼 클릭
Next 클릭
Configurations:
Debug
Release
체크
Finsh 클릭
Debug Compile
1. 프로젝트 빌드
Project -> Build Project 또는 Build All
단축키: Ctrl + B
1.1 C++ Managed Build 빌드 설정 위치
Window-> Preferences
C/C++ -> Build -> Environment
1.2 Makefile Project
Window-> Preferences
C/C++ -> Makefile Pages settings
2. 실행
Run -> Run
단축키 : Ctrl + F11
2.1 Launch failed. Binary not found.
바이너리 파일 경로 설정
Run -> Run Configurations
C/C++ Application
Project: Cpp01
C/C++Application:
Debug/Cpp01 ---> 경로 설정 Browse 클릭
Apply
Run
Console 창
!!!Hello World!!!
Release Compile
1. Project -> Build Configuration -> Set Active -> Release 선택
2. 프로젝트 빌드
Project -> Build Project 또는 Build All
단축키: Ctrl + B
3. Run -> Run
단축키 : Ctrl + F11
터미널 실행 방법
1. 소스 위치 확인 방법
화면 구성 왼쪽 창 마우수 좌표 이동
Cpp01 오른쪽 마우스 클릭 -> Properties 선택
Location: 프로젝트 경로 드래그 복사
2. 터미널 실행 ctrl + art + t
cd ~/eclipse-workspace/Cpp01/Debug
./Cpp01
cd ~/eclipse-workspace/Cpp01/Release
./Cpp01
Ubunt 18.04 cdt Eclipse Install
eclipse 설치
c++ 환경 구축시 cdt 패키징 설치
우분투 18.04
0. 설치 버전 확인
cat /etc/*release
1. Eclipse 설치
2. 현재 저장소 패키지 관련 없음. 2018 12 05
3. Eclipses CDT 설치
sudo apt install -y eclipse-cdt-*
4. Eclipse 다운로드
URL=https://www.eclipse.org/downloads/download.php
ECLIPSE=/oomph/epp/oxygen/R/eclipse-inst-linux64.tar.gz
MIRROR=1
wget -q -O eclipse-inst-linux64.tar.gz "${URL}?file=${ECLIPSE}&mirror_id=${MIRROR}"
tar zxf eclipse-inst-linux64.tar.gz
5. 프로그램 실행
./eclipse-installer/eclipse-inst
6. 팝업창 선택
Eclipse IDE for C / C ++ Developers
7. 설치
Install 버튼 클릭
8. 동의
Accept Now 버튼 클릭
9. 라이센스 수락
Accept
10. 패키지 선택
Select All
11. 설치 완료
LAUNCH
12. 설치 프로그램 제거
$ rm -rf eclipse-inst-linux64.tar.gz eclipse-installer
sudo sed -i /usr/share/applications/eclipse.desktop \
-e "s;^Exec=eclipse;Exec=${HOME}/eclipse/cpp-oxygen/eclipse/eclipse;g"
13. 실행
./eclipse/cpp-oxygen/eclipse/eclipse
c++ 환경 구축시 cdt 패키징 설치
우분투 18.04
0. 설치 버전 확인
cat /etc/*release
1. Eclipse 설치
2. 현재 저장소 패키지 관련 없음. 2018 12 05
3. Eclipses CDT 설치
sudo apt install -y eclipse-cdt-*
4. Eclipse 다운로드
URL=https://www.eclipse.org/downloads/download.php
ECLIPSE=/oomph/epp/oxygen/R/eclipse-inst-linux64.tar.gz
MIRROR=1
wget -q -O eclipse-inst-linux64.tar.gz "${URL}?file=${ECLIPSE}&mirror_id=${MIRROR}"
tar zxf eclipse-inst-linux64.tar.gz
5. 프로그램 실행
./eclipse-installer/eclipse-inst
6. 팝업창 선택
Eclipse IDE for C / C ++ Developers
7. 설치
Install 버튼 클릭
8. 동의
Accept Now 버튼 클릭
9. 라이센스 수락
Accept
10. 패키지 선택
Select All
11. 설치 완료
LAUNCH
12. 설치 프로그램 제거
$ rm -rf eclipse-inst-linux64.tar.gz eclipse-installer
sudo sed -i /usr/share/applications/eclipse.desktop \
-e "s;^Exec=eclipse;Exec=${HOME}/eclipse/cpp-oxygen/eclipse/eclipse;g"
13. 실행
./eclipse/cpp-oxygen/eclipse/eclipse
CPP
example 1
vi foo.cpp
#include <iostream>
using namespace std;
int main(int argc, *argv[]) {
cout << "Hello World!";
return 0;
}
example 2
vi foo1.cpp
#include <iostream>
using namespace std;
int main(int argc, *argv[]) {
cout << "Hello World!" << endl;
return 0;
}
example 3
#include <iostream> // usr/include/C++/버전/iostream 위치 확인.
using namesapce std; // std::endl 사용정의
int main(int argc, *argv[]) {
cout << "Hello World!" << endl1;
return 0
}
iostream using 검증 == iostream using 는 곳 C에서 iostream.h 유사한 형식을 가진다.
vi /usr/include/c++/7/iostream
namespace std _GLIBCXX_VISIBILITY(default)
Compile
g++ -o foo foo.c
g++ -o foo1 foo.c
일반적인 Nasm 파일 구성
Section .data
; 주석 표현
hello: db 'this is an example string', 10
HelloLenghth: equ 26
;db = 바이트 정의, dw = word 정의, dd = word 정의
Section .bss
;여기는 수정 가능한 변수를 선언
Variable1: resb 255
Variable2: resb 1
Variable3: resw 1
; 주석 표현
hello: db 'this is an example string', 10
HelloLenghth: equ 26
;db = 바이트 정의, dw = word 정의, dd = word 정의
Section .bss
;여기는 수정 가능한 변수를 선언
Variable1: resb 255
Variable2: resb 1
Variable3: resw 1
Section .text
;프로그램 코드로 이동
global _start ; 외부 프로그램 시작
_start: ;프로그램이 실제로 시작
;여기에서 코딩 시작
Example File
Section .data
hello: db 'Hello world!',10
helloLen: equ 13
section .text
global _start
_start:
mov eax, 4 ;리눅스 sys_write 호출
mov ebx, 1 ;파일 기술자
mov ecx, hello ;문자열 주소 넣기
mov edx,helloLen ;hello 문자열 공간 크기
int 80h ;리눅스 시스템 인터럽트
mov eax, 1 ; sys_exit 호출
mov ebx,0 ;매개변수 0
int 80h ;리눅스 시스템 인터럽트
Compile:
nasm -f elf filename.asm
ld -s -o outputfilename filename.o
Wifi troubleshooting
LG Touch notebook wifi driver problem
ls pci
Network controller: Intel Corporation Wireless 7260 (rev bb)
modinfo iwlwifi | grep 7260
firmware: iwlwifi-7260-17.ucode
cd /lib/firmware
sudo rm iwlwifi-7260-17.ucode
sudo wget https://github.com/OpenELEC/iwlwifi-firmware/raw/master/firmware/iwlwifi-7260-17.ucode
sudo modprobe -r iwlwifi
sudo modprobe iwlwifi
dmesg | grep iwl
reboot
ls pci
Network controller: Intel Corporation Wireless 7260 (rev bb)
modinfo iwlwifi | grep 7260
firmware: iwlwifi-7260-17.ucode
cd /lib/firmware
sudo rm iwlwifi-7260-17.ucode
sudo wget https://github.com/OpenELEC/iwlwifi-firmware/raw/master/firmware/iwlwifi-7260-17.ucode
sudo modprobe -r iwlwifi
sudo modprobe iwlwifi
dmesg | grep iwl
reboot
피드 구독하기:
글 (Atom)