C++ 수업 090804~090807#
090804-TUE#
1장#
cout<<출력1<<"출력2string"<<출력3;
std::cout<<"출력"; // :: 공간지정 연산자
-
std 영역안에 있는 cout 을 사용
함수 오버로딩 Function Overloading#
동일한 함수명 중복하여 사용, 매개변수가 다르므로 구분
동일한 함수명 (매개변수1)
동일한 함수명 (매개변수1, 매개변수2)
- #include <iostream>
- int function(int a=10) // int a=10은 파라미터가 없는 경우로, 함수의 지역변수 a에 디폴트값인 10을 입력한다.{
return a+1;
}
int function(void) // void는 값이 없는 경우로 함수의 정의가 모호해짐{
return 10;
}
int main(void)
{
//std::cout<<function(10)<<std::endl; // 결과 11 std::cout<<function(11)<<std::endl; // 결과 12 //std::cout<<function()<<std::endl; // ambiguous! 모호해짐 return 0;
}
인-라인화#
-
C에서는 Macro함수
- 전처리기에 의해 처리
- 실행 속도의 향상
- 구현의 어려움
-
C++에서는 inline 선언에 의한 함수의 인-라인화
- 컴파일러에 의해서 처리
- 실행 속도의 향상
- 구현 용이성
- 컴파일러에게 최적화의 기회 제공
이름공간 Namespace#
namespace std { // 선언
cout;
cin;
endl; // endline
}
using namespace std; // 사용
2장 키워드#
const키워드#
자료형 bool#
C언어에는 1과 0으로 true, false를 구분
C++에는 논리적인 참과 거짓을 의미하는 키워드 true나 fasle를 사용 , 데이터타입 bool로 선언하여 사용
데이터 타입 bool result;
result = true;
레퍼런스 Reference#
int val=10;
int *val=&val; // &는 val의 주소값을 의미
int &ref = val; // &는 val의 Reference를 선언하는 의미
- #include <iostream>
- using std::cout;
using std::endl; - int main(void)
{
int val=10;
int &ref=val; - val++;
cout<<"ref : "<<ref<<endl;
cout<<"val : "<<val<<endl; - ref++;
cout<<"ref : "<<ref<<endl;
cout<<"val : "<<val<<endl; - return 0;
}
-
레퍼런스의 제약
- 초기화?
-
레퍼런스를 이용한 Call by Reference
-
포인터 연산을 할 필요가 없으므로 안정적
- 데이터의 복사 연산이 필요 없다.
-
원본 데이터의 손실 예상 - const 선언!
- function (const char* name); // 함수내에서 name을 변경할 수 없도록 한다.
-
new 와 delete#
Cpp에서 C에서
int *val = new int; int *val = (int*)malloc(sizeof(int));
int *val = new int[size]; int *val = (int*)malloc(sizeof(int*size));
delete val;
delete []arr;
- NULL 포인터 리턴하는 new 연산자
- #include <iostream>
- using std::cout;
using std::endl; - int& increment(int &val){
val++;
return val;
} - int main(void)
{
int n=10;
int &ref=increment(n); - cout<<"n : "<<n<<endl;
cout<<"ref : "<<ref<<endl; - return 0;
}
- /* ref_error.cpp */
#include <iostream> - using std::cout;
using std::endl; - int& function(void){
int val=10;
return val;
} - int main(void)
{
int &ref=function(); - cout<<"ref : "<<ref<<endl; //현재 결과는 10 이 나오지만, 나중에 포인터 연산을 하게 되면 error 발생
- return 0;
}
090805-WED #
3장 클래스#
3-1 구조체와 클래스#
- 데이터 추상화 -> 클래스화 -> 인스턴스화(객체)
- 접근 제어 : public, private, protected
- #include <iostream>
- using namespace std;
- class Counter {
public : int val; // 멤버 변수 void Increment(void) // 멤버 함수만이 클래스 내의 멤버 변수를 사용할 수 있다 {
val++;
}
}; - int main(void)
{
Counter cnt; cnt.val=0; cnt.Increment();
cout<<cnt.val<<endl;
return 0;
}
3-4 멤버 함수의 외부 정의#
- 멤버 함수의 인-라인 화
- 헤더 파일을 이용한 파일의 분할
4장 클래스의 정의#
-
클래스
- 캡슐화(모듈, 기능별 정의)
- 정보 은닉
-
클래스 객체의 생성과 소멸
- 생성자
- 소멸자
4-1 정보 은닉#
- public을 사용하지 않고 private이나 protected를 사용
- public을 사용한다는 것은 class이전의 C로 돌아가는 것임
4-2 캡슐화#
- class
4-3 생성자와 소멸자#
- 생성자 함수를 통한 인자 전달
- public 생성자 : 어디서든 객체 생성 가능
- private 생성자 : 클래스 내부에서만 가능
Person p = Person("KIM", "010-000-0000", 22);
Person p("KIM", "010-000-0000", 22); // 객체를 만들면서 매개 변수를 써서 함수를 호출
Person p(); // 파라미터 형식을 맞춰줘야 함
- 디폴트 생성자
4-4 클래스와 배열#
-
객체 배열과 생성자
- 객체를 배열로 가짐
- 객체 배열은 기본적으로 void 생성자의 호출을 요구한다.
-
객체 포인터 배열
- 포인터로 배열을 가짐
4-5 this 포인터#
-
this 포인터의 의미
- 클래스 자기 자신
class Point {
int aaa;
public :
Point(int aaa)
{
this->aaa=aaa; // this->aaa는 class의 aaa, 그냥 aaa는 public안의 aaa
}
};
4-6 friend 선언#
-
friend 선언의 유용성
- 유용하지 않다
- 정보 은닉에 위배되는 개념
- 연산자 오버로딩에서 유용하게 사용
- #include <iostream>
- using std::cout;
using std::cin;
using std::endl; - class Counter
{
int val; - public:
Counter() { // 생성자 초기화
val=0;
}
void Print() const{ // {블럭 안에서}값 변경 금지 const cout<<val<<endl;
}
friend void SetX(Counter& c, int val); // friend 선언}; - void SetX(Counter& c, int val) // 전역 함수{ c.val=val; }
- int main()
{
Counter cnt;
cnt.Print(); - SetX(cnt, 2002);
cnt.Print();
return 0;
}
연습문제 - Linked List (C -> C++)#
- C 에서 사용한 scanf 나 printf는 그대로 사용할 수는 있지만, 좋지 않다
- C 에서 쓴 getch()는 C++ 에서 사용 불가 -> getche() 로 대체
- 소멸자 함수에서 함수를 메모리에서 해제하기 위해 delete 연산자를 사용한다. 생성된 구조체를 모두 찾아서 해제시켜준다.
- C에서 사용한 malloc 대신에 new연산자를 사용한다.
- C에서 class를 만들어서 함수 선언을 해준다
-
C++의 main()에서 함수를 호출할 경우 class명을 붙이고 :: 공간지정연산자를 붙여서 호출한다.
- Linked List 첨부 파일 : myList.cpp C++, main.c myList.c myList.h C
이 글은 스프링노트에서 작성되었습니다.