•객체 지향 프로그래밍(OOP)은 데이터 필드(개체를 설명하는 속성)와 관련 프로시저를 가진 "개체"의 개념을 나타내는 프로그래밍 패러다임이다. 일반적으로 클래스의 인스턴스인 개체는 응용 프로그램 및 컴퓨터 프로그램을 설계하기 위해 서로 상호 작용하기 위해 사용된다.
• C++, Objective-C, Smalltalk, Delphi, Java, Javascript, C#, Perl, Python, Ruby 및 PHP는 객체 지향 프로그래밍 언어의 예이다.
데이터와 기능을 하나의 컴포넌트로 패킹하여 데이터와 기능을 선택적으로 숨길 수 있음
클래스의 private, public으로 메서드나 변수의 접근을 제어하는 개념
서로 다른 유형의 엔티티에 대한 단일 인터페이스 제공하며 다형성을 함수와 연산자 모두에 적용할 수 있다.
함수, 연산자를 오버로딩 하는 개념!
•상속을 통해 프로그래머는 다른 클래스의 관점에서 클래스를 정의할 수 있으므로 응용 프로그램을 쉽게 만들고 유지할 수 있다.
• 상속을 통해 코드 기능을 재사용하고 구현 시간을 단축할 수 있다.
"<<" 삽입 연산자를 통해 c 언어의 printf문을 대체하여 사용
삽입 연산자를 여러번 사용하여 문자열과 숫자를 연결지어 출력하는 것도 가능
endl을 사용하여 linebreak, 다음줄로 넘어가도록 할 수 있음
#include <iostream>
using namespace std;
int main() {
cout << "First Sentence" << endl;
cout << "Second Sentence. \nThird sentence." << endl;
}
결과:
First Sentence.
Second Sentence.
Third sentence.
참고로 endl의 경우 flush() 함수를 겸하기 때문에 실행마다 출력 버퍼를 지워주는 과정(flush)이 생겨 "\n" 보다 속도가 느리므로 "\n"을 사용하는 편을 습관화하는 것이 좋을 듯 하다.
">>" 추출 연산자를 통해 선언된 변수의 입력을 받을 수 있다
역시 여러 연산자를 연결해서 사용도 가능하며 공백이나 개행으로 값을 받는다.
#include <iostream>
using namespace std;
int main() {
int i;
char c;
cin >> i >> c;
}
결과:
입력: i a
출력: ia
#include <iostream>
using namespace std;
int main() {
cout << "Enter age, grade, and name:" << endl;
int age;
float grade;
char name[10];
cin >> age >> grade >> name;
cout << "Age= " << age << ", Grade= " << grade << ", Name = " << name << endl;
}
메모리의 특정 부분을 확보한 공간. 프로그램이 실행되는 동안 이 공간 안에서 내용물을 변경할 수 있어서 변수라고 한다.
- 변수의 생명 주기(또는 범위) =변수가 생성되고 소멸될 때까지의 시간
- 변수의 사용 가능한 범위 = 블록에 정의된 변수는 블록 내에서만 액세스
#include <iostream>
using namespace std;
int main() {
int var = 1;
{
char var = 'a';
{
cout << "var = " << var << '\n';
}
cout << "var = " << var << '\n';
}
cout << "var = " << var << '\n';
}
결과:
var = a
var = a
var = 1
가장 안쪽의 var은 블록 내에 변수선언이 없으므로 바로 바깥쪽의 변수 가져옴,
나머지는 블록의 변수 선언을 참조하여 출력함
선언 위치 | local, global |
---|---|
저장 위치 | auto, static, register |
local variable : main 함수 및 사용자 지정 함수에서 선언된 변수, 즉 블록 안에서만 정의되는 변수
함수의 매개변수 : 함수의 헤더 부분에 정의되어 있는 변수
gloabl variable
static variable : static 키웢드를 붙여서 지역변수를 정적 변수로 만듦
ex)
#include <iostream>
using namespace std;
void sub(void) {
int i=0;
static int s = 0;
i++;
s++;
cout << "(" << i << "," << s << ")" << endl;
}
int main(){
sub(); // 1,1
sub(): // 1,2
sub(); //1,3
}
값을 변경할 수 없는 저장소 엔티티.
- 값이 언제나 고정적
- const라는 한정자와 이름을 지정한 뒤, 할당 연산자를 입력하고 저장할 값을 저장한다.
const double PI = 3.141593 // 상수 선언
- 변수 하나의 이름 밑의 블록에 변수 목록을 선언하는 복잡한 데이터 형식 선언이다.
- 몇몇 변수는 포인터 혹은 변수명을 통해 액세스 할 수 있다.
- 기본적으로 구조체는 public이다.
#include <iostream>
using namespace std;
struct Student {
int id;
float grade;
int gender;
};
int main() {
struct Student st;
cout << "학번을 입력하세요\t";
cin >> st.id;
cout << "성적을 입력하세요\t";
cin >> st.grade;
cout << "성별을 입력하세요(남자:1, 여자:2)\t";
cin >> st.gender;
cout << "\n\n";
cout << "입력하신 학생의\n";
cout << "학번은 " << st.id << "\n" ;
cout.setf(ios::showpoint);
cout.precision(2);
cout << "성적은" << (float)st.grade << "\n";
cout << "성별은" << (st.gender == 1 ? "남자" : "여자") << "\n";
cout << "입니다\n";
}
결과:
학번을 입력하세요 2017312365
성적을 입력하세요 4.5
성별을 입력하세요(남자:1, 여자:2) 1
입력하신 학생의
학번은 2017312365
성적은4.5
성별은남자
입니다
cout.setf(ios::showpoint): 소숫점 표시(.), 생략된 0 들을 모두 출력 (기본 6자리)
cout.precision(2): 2자리 까지 표시 ex)45.5 넣으면 46. 과 같이 표시
#include <iostream>
using namespace std;
struct Drink {
int Sprite = 10;
int Coke = 10;
};
struct Food {
int Rice = 10;
int Pizza = 10;
};
int main() {
Drink drk;
Food fd;
while (1) {
int answer = -1;
cout << "Order (0: Drink, 1: Food, 2: Quit) : ";
cin >> answer;
if (answer == 0) {
int drinkAnswer = -1;
cout << "Drink(0: Coke, 1 : Sprite) : ";
cin >> drinkAnswer;
if (drinkAnswer == 0) {
drk.Coke--;
}
else
drk.Sprite--;
}
else if (answer == 1) {
int foodAnswer = -1;
cout << "Food(0: Rice, 1 : Pizza) : ";
cin >> foodAnswer;
if (foodAnswer == 0) {
fd.Rice--;
}
else
fd.Pizza--;
}
else if(answer ==2){
break;
}
cout << "Remaining: Coke = " << drk.Coke << ", Sprite = "
<< drk.Sprite << ", RIce = " << fd.Rice << ",Pizza = " << fd.Pizza << "\n";
}
}
Namespace는 고유한 변수이름 공간을 설정하기 위해 만든다. 즉, 같은 이름을 가진 변수나 함수, 클래스 등을 독립적으로 가질 수 있는 공간이다.
• 네임스페이스는 변수 및 함수와 같은 식별자 집합을 위한 컨테이너, 구조체도 넣을 수 있음.
• 네임스페이스를 통해 동일한 이름의 식별자를 구분할 수 있다.
• 특정 네임스페이스의 변수 및 함수는 '::' 연산자를 사용하여 액세스할 수 있다.
혹은 using namespace std와 같이 네임스페이스 선언을 해줘야 함
#include <iostream>
using namespace std;
namespace AA{
char test = 'A';
void func(char c) {
cout << "Inside AA, Input: " << c << endl;
}
}
namespace BB {
char test = 'B';
void func(char c) {
cout << "Inside BB, Input: " << c << endl;
}
} void main() {
AA::func(AA::test);
AA::func(BB::test);
BB::func(AA::test);
BB::func(BB::test);
}
세상에는 많은 영준이가 있으나 이씨 가문의 영준이를 불러오고 싶을 때 네임스페이스를 사용하는 걸로 생각하면 됨(같은 이름의 함수명, 변수명을 네임스페이스에 따라 다르게 정의가 가능)
묵시적 형변환:
•컴파일러에 의한 자동 형 변환
• 혼합형 표현식에서는 프로그램이 올바르게 실행되도록 실행 시 필요에 따라 하나 이상의 서브타입 데이터를 슈퍼타입으로 변환할 수 있다.
명시적 형변환
•프로그램 내에서 명시해주는 형변환
•여러가지 방식의 명시적 형변환이 있음
결과 :
Weight percent = 0
Real Weight percent = 75
cout << (30/40) * 100 << endl;
cout << (float)(30/40) * 100 << endl;
cout << (float) 30 / 40 * 100;
0
0
75