검색결과 리스트
…™업무일지。에 해당되는 글 148건
- 2014.10.20 가상 함수와 추상 클래스
- 2014.10.17 가상시리얼포트
- 2014.10.17 ▶Win32 API 주요 함수
- 2014.10.16 ※생성자(Constructor) 및 오버로딩(Overloading)
- 2014.10.15 ※ WINAPI 기본형
- 2014.10.15 상속(Inheritance)의 이해
- 2014.10.15 JAVA 시작하기
- 2014.10.15 ※const static 멤버
- 2014.10.15 ※인라인(inline) 함수 -작업중-
- 2014.10.15 ※함수인자 디폴트
글
가상 함수 (virtual function)
- 기본 클래스에 선언된 함수를 파생 클래스에서 재정의한 상속(:) 관계함수(상속 관계)
-> 상위에 있는 것을 무시하고 하위 것을 하위 클래스에 있는 함수을 실행하고자 할때
- 오버라이딩(overriding)이라고 함
- 상위 클래스의 멤버 함수를 무시
- 상위 클래스와 멤버 함수의 매개변수는 같아야 한다.
- 리턴값은 상관없음.
형식
함수 앞에 virtual 이라는 이름을 붙여준다.
virtual void Print(){ cout<<"A"<<endl }
접근방법은 *포인터와 &참조자 형태로 접근하는 방법이 있다.
아래 예제를 참고 한다.
예제
#include <iostream>
using namespace std;
class A
{
public:
virtual void Print() {cout <<"A"<<endl;}
};
class B : public A // A 상속
{
public:
void Print() { cout <<"B"<<endl; }
};
int main()
{
B ClassB; //obj 생성
//포인터형
A * pClassA= &ClassB; //포인터형 obj 생성
pClassA->Print(); //B 을 출력
//참조자형
A & ClassRefA=ClassB; //참조자형 obj생성(선언과 동시에 초기화, A 클래스의 별명 B 클래스)
ClassRefA.Print(); //B 을 출력
return 0;
}
다형성( polymorphism )
- 상위 클래스의 가상 함수가 하위 클래스의 종류와 상관없이 재정의 되어 실행되는 특성
예제
#include <iostream>
using namespace std;
class A
{
public:
virtual void Print(){ cout <<"A"<<endl; }
};
class B : public A
{
public:
void Print() { cout <<"B"<<endl; }
};
class C : public A
{
public:
void Print() { cout <<"C"<<endl; }
};
int main()
{
B ClassB;
C ClassC;
//포인터형
A * pClassA= &ClassB;
pClassA->Print();
pClassA=&ClassC;
pClassA->Print();
//참조자형
A & ClassRefA=ClassB;
ClassRefA.Print();
return 0;
}
가상 기본 클래스(virtual base class)
- 다중 상속에서 기본 클래스가 한번만 생성되게 하기 위한 상속
- 기본 클래스는 공유가 목적
- 상속 접근 지정자 앞에 virtual을 붙임
형식
class A {};
class B: virtual public A
{ };
class C: virtual public A
{ };
class D: public B, public C
{ };
'…™업무일지。 > …™C++。' 카테고리의 다른 글
가상시리얼포트 (0) | 2014.10.17 |
---|---|
※생성자(Constructor) 및 오버로딩(Overloading) (0) | 2014.10.16 |
상속(Inheritance)의 이해 (0) | 2014.10.15 |
※const static 멤버 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
설정
트랙백
댓글
글
'…™업무일지。 > …™C++。' 카테고리의 다른 글
가상 함수와 추상 클래스 (0) | 2014.10.20 |
---|---|
※생성자(Constructor) 및 오버로딩(Overloading) (0) | 2014.10.16 |
상속(Inheritance)의 이해 (0) | 2014.10.15 |
※const static 멤버 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
설정
트랙백
댓글
글
▶Win32 API 주요 함수 아래 링크를 클릭 하세요
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
---|---|
Win32 API 기초정리 (0) | 2014.10.20 |
※ WINAPI 기본형 (0) | 2014.10.15 |
WIN API 시작하기 ver1_0a (0) | 2014.09.29 |
BITMAP and 영상출력 참고 사이트 (0) | 2014.09.25 |
설정
트랙백
댓글
글
▶생성자(Constructor)
클래스를 선언하게 되면 그 클래스는 메모리에 객체로써 자리를 잡게 된다.
그러나, 이 객체는 해당 메모리에 자리만 잡고 있을 뿐이지, 초기화는 되지 않으므로,
생성자를를 통해서 초기화를 해줄 필요가 있다.
기본적으로 객체를 선언하였다면, 객체를 이루는 변수들에 값을 대입함으로써 객체를 초기화 할 수 있지만,
객체가 생성될때 마다 값을 대입하는 행동은 귀찮고 비효율적이다.
이런 비효율 적인 활동을 간단하게 해결 할 수 있게 하는 것이 바로 생성자이다.
생성자는 스스로 자기 자신의 객체를 초기화 하는 방법을 정의하는 것으로써,
생성자의 이름은 항상 클래스명과 동일해야 한다.
또한 오버로딩을 통해서 인자값을 받을 수 있음
리턴값을 가질 수 없다는 것이 특징이다.
▶생성자 호출 방법
생성자명 객체명 = 생성자명(인자값);
ex)
People peo(나이, "이름",키) ;
people peo = People(나이, "이름", 키);
private:
int age;
char * name;
double height;
public:
void set_People(int _age, char* _name, double _height);
void show_People();
//기본 생성자
People(){
char *t = "naddru";
cout<<"=== 생성자 호출 : 인자값 없음 ==="<<endl;
age=30;
name="naddru";
height=182;
}
//생성자 오버로딩(인자값을 지정해 줄 수 있다)
People(int _age, char* _name, double _height){
cout<<"=== 생성자 호출 : 인자값 3개 ==="<<endl;
age= _age;
name= _name;
height= _height;
}
};
▶생성자 오버로딩
오버로딩과 오버라이딩 개념은 항상 헷갈리지만, 이 두 개념에 정리는 다음으로 미룬다.
일단 생성자에선 생성자 오버로딩이 가능하며, 이것을 통해서 인자값을 전달 할 수 잇다.
함수를 재정의하는 것을 오버라이딩(Overriding)이라하며, 이것은 기존의 함수가 행해왔던 활동을 다른 활동으로 변경하는 것을 의미한다.
오버로딩(Overloading)은 기존의 함수에 인자값이 다른 함수를 중복 정의 하는 것
▶소스코드
#include <iostream>
using namespace std;
class People{
private:
int age;
char* name;
double height;
public:
void set_People(int _age , char* _name , double _height);
void show_People();
//default 생성자
People(){
char* t = "naddru";
cout << "=== 생성자 호출 : 인자값 없음 ===" << endl;
age = 30;
name = "naddru";
height = 182;
}
//생성자 오버로딩
People(int _age , char* _name , double _height){
cout << "=== 생성자 호출 : 인자값 3개 ===" << endl;
age = _age;
name = _name;
height = _height;
}
};
void People::set_People(int _age, char* _name , double _height){
age = _age;
name = _name;
height = _height;
}
void People::show_People(){
cout << "나이 : " << age << endl;
cout << "이름 : " << name << endl;
cout << "키 : " << height << " 이었으면 좋겠다. ㅎ "<<endl << endl;
}
int main(){
// 기본 생성자 사용
People p = People();
p.show_People();
// 오버로딩 된 생성자 사용
People p2(31,"lina",168);
p2.show_People();
//p 객체의 값을 변경
p.set_People(18,"child",178);
p.show_People();
return 0;
}
'…™업무일지。 > …™C++。' 카테고리의 다른 글
가상 함수와 추상 클래스 (0) | 2014.10.20 |
---|---|
가상시리얼포트 (0) | 2014.10.17 |
상속(Inheritance)의 이해 (0) | 2014.10.15 |
※const static 멤버 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
설정
트랙백
댓글
글
윈도우를 만드는 과정
1단계: WndClass 정의 윈도우의 기반이 되는 클래스를 정의한다.
1단계 |
WndClass 정의 |
|
2단계 |
RegisterClass |
|
3단계 |
CreateWindow |
|
4단계 |
ShowWindow |
|
5단계 |
메세지 루프 |
|
※ WINAPI 기본형
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
---|---|
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
WIN API 시작하기 ver1_0a (0) | 2014.09.29 |
BITMAP and 영상출력 참고 사이트 (0) | 2014.09.25 |
설정
트랙백
댓글
글
상속과 클래스 관계
- 기본(base) 클래스의 속성을 물려 받는 것
base class <-> derived class
base class: 기본 클래스
멤버
-private
-protected
-publie
derived class: 드라이브드 클래서 =파생 클래스
-기능적인 면
기본 클래스<파생 클래스
- 파생 클래스는 기본 클래스의 protected, public멤버 사용 가능
참고 사항
-기본 클래스에 대한 관례적인 명칭
super class:최상위 클래스 , parent class:부모 클래스
-파생 클래스에 대한 관례적인 몇칭
sub class:하위 및 최하위 클래스, chaild class:자식 클래스
[형식1] 단일 상속 [접근지정자]:private,protected,public
class Derived:[접근지정자]Base {
//member list
};
class A {..};
class B : public A {};
[형식2] 다중 상속 [접근지정자]:private,protected,public
class Derived:[접근지정자] Base1,[접근지정자] Base2 { };
{
//member list
};
class A { };
class B { };
class C : public A ,protected B { };
상속: 기존의 과념 -> 기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소
새로운 관점으로 상속을 보자!
파생 클래스에서 기본 클래스에 대한 접근 권한
- private 상속
* private 멤버 : 사용 불가
* protected : private로 사용
* public : private로 사용
부모 클래스 상위 클래스 기본 클래스 |
자식 클래스 하위 클래스 파생 클래스 |
|
* private 멤버 * protected *public |
사용 불가 private로 사용 private로 사용 |
|
|
|
|
예제
private:
void ShowPrivateA(){cout<<"A private"<<endl;}
protected:
void ShowProtectedA(){cout<<"A protected"<<endl;}
public:
void ShowPublicA(){cout<<"A public"<<endl;}
};
class B:private A
{
public:
void Show(){
// ShowPrivateA(); 사용 불가
ShowProtectedA(); 사용 가능
ShowPublic(); 사용 가능
}
};
int main(){
B Test;
Test.Show();
return 0;
}
- protected 상속
* private 멤버 : 사용 불가
* protected : protected로 사용
* public : protected로 사용
- public 상속
* private 멤버 : private로 사용
* protected : protected로 사용
* public : protected로 사용
예제
'…™업무일지。 > …™C++。' 카테고리의 다른 글
가상시리얼포트 (0) | 2014.10.17 |
---|---|
※생성자(Constructor) 및 오버로딩(Overloading) (0) | 2014.10.16 |
※const static 멤버 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
※함수인자 디폴트 (0) | 2014.10.15 |
설정
트랙백
댓글
글
설정
트랙백
댓글
글
※const static 멤버
클래스 내에 선언되 const 멤버변수(상수)의 초기화는 이니셜라이저를 통해야만 한다.
그러나 const static으로 선언되는 멘버변수(상수)는 직접 선언과 동시에 초기화가 가능하다.
※mutable
const 함수 내에서의 값의 변경을 예외적으로 허용
가급적 사용을 자제
'…™업무일지。 > …™C++。' 카테고리의 다른 글
※생성자(Constructor) 및 오버로딩(Overloading) (0) | 2014.10.16 |
---|---|
상속(Inheritance)의 이해 (0) | 2014.10.15 |
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
※함수인자 디폴트 (0) | 2014.10.15 |
※ 함수 오버로딩 (0) | 2014.10.15 |
설정
트랙백
댓글
글
※인라인(inline) 함수
in은 "내부" line은 "프그램 코드 라인" 의미
/*프로그램 코드라인 안으로 들어가 버린 함수*/
매크로 함수의 장단점
장점: 일반적인 함수에 비해서 실행속도 빠름
단점: 정의하기가 어렵다. 복잡한 함수를 매크로의 형태로 정의 하는데 한계가 있다.
매크로 함수의 예
#include <iostream>
using namespace std;
#define SQUARE(x) ((x) * (x))
int main()
{
cout<<SQUARE(5)<<endl;
return 0;
}
'…™업무일지。 > …™C++。' 카테고리의 다른 글
상속(Inheritance)의 이해 (0) | 2014.10.15 |
---|---|
※const static 멤버 (0) | 2014.10.15 |
※함수인자 디폴트 (0) | 2014.10.15 |
※ 함수 오버로딩 (0) | 2014.10.15 |
5강 클래스(class) (0) | 2014.10.13 |
설정
트랙백
댓글
글
int MyFunc(int A, int B)라는 함수가 있을때 인자값을 디폴트 값을 줄 수가 있다.
int MyFunc(int A=1, int B=2) { return A+B; } |
함수 호출시 인자를 하나만 호출 할 수도 있고, 두개를 호출 할 수도 있음.
int main()
{
MyFunc(); //함수인자 디폴트
MyFunc(1); //인자 하나 호출
MyFunc(1,2); //인자 두개 호출
cout<<MyFunc()<<endl;
cout<<MyFunc(1)<<endl;
cout<<MyFunc(1,2)<<endl;
return 0;
}
함수의 원형을 별도로 선언하는 경우 -> 매개변수의 디폴트 값은 함수의 원형 선언에만 위치 시켜야 한다.
#include <iostream>
using namespace std;
int MyFunc(int iA=1, int iB=2); //원형 선언에만 위치
int main(void)
{
cout<<
}
int MyFunc(int iA, int iB)
{
return iA+iB;
}
'…™업무일지。 > …™C++。' 카테고리의 다른 글
※const static 멤버 (0) | 2014.10.15 |
---|---|
※인라인(inline) 함수 -작업중- (0) | 2014.10.15 |
※ 함수 오버로딩 (0) | 2014.10.15 |
5강 클래스(class) (0) | 2014.10.13 |
4강 메모리 할당과 해제 (0) | 2014.10.12 |
RECENT COMMENT