군대에서 다시 처음부터 공부하고 있는 C.
사실 언어를 목적으로만 배웠지 언어자체를 공부한 건 얼마 되지도 않기 때문에 확실히 기초가 매우 부실한 프로그래머다.
그래서 요즘엔 C부터 시작해서 C++까지 싹 훑어보고 있다.
전혀 벗어나지 못한 구조적 프로그래밍 습관과 클래스 개념에 대한 무지. 공부할수록 확 와닿는다.
#include "stdafx.h"
private: // private는 외부에서 절대 접근할수 없다. 멤버함수와 friend 선언된 함수 제외
int a;
protected: // protected는 외부에서는 접근할수 없으나, 상속된 클래스의 멤버에서는
int b; // 접근이 가능하다.
public: // 말그대로 공용,
number(int k=5,int j=4); // 생성자 매개변수없이 생성할경우 적용되는 초기값 설정
int c;
};
number::number(int k, int j){ // 생성자.
a=k;
b=j;
c=k+j;
}
private: // 상속하는 순간 number클래스를 하나 생성하여서
int sum; // number클래스를 토대로 plus의 내용을 덧붙인다.
public:
void add(); // 상속받은 number클래스의 public 멤버변수 b,c를 더해서 sum에 넣는다.
void print(); // 출력
void incre(); // protected 멤버변수 b를 1증가시킨다.
plus operator+(plus a); // + 연산자 오버로딩. 함수내부를 일반함수처럼 코딩가능하다.
};
plus plus::operator+(plus a){
plus temp;
temp.c = this->c + a.c;
temp.b=0;
return temp;
}
void plus::add(){
sum = b+c;
//sum= a+b+c;
}
void plus::incre(){
b++;
}
void plus::print(){
printf("%d",sum);
}
void main(){
plus p,k,m; // number를 상속받아 plus클래스를 3개 생성하였다.
p.incre(); //상속받은 protected 멤버변수에 접근이 가능한지 체크
p.add(); // 상속받은 protected , public 멤버변수의 합을 plus클래스의 멤버변수에 넣는다.
k.add(); // p , k 의 sum값이 다르게 나오는 것을 확인. 상속받는 클래스(number)는 상속받은 각 클래스(plus k,m)에 독립적으로 선언&할당 된다는것을 알 수 있다.
m=p+k; // 연산자 오버로딩. + 연산자를 오버로딩해서 일반함수처럼 적용했다. 오버로딩 이기때문에 당연히 자료형이 일치하면 사용된다. 현재 오버로딩된 형태는 (plus) = (plus) + (plus)
// 2번째 클래스 (plus)는 클래스안에서 연산자 오버로딩을 하였을땐 자동으로 자신의 형태가 적용되는 것 같다. 일반 함수에서는 operator+(클래스 , 클래스) 이렇게 매개변수를 2개로 선언해서 사용한다.
m.add();
m.printf();
return;
}
http://www.sosc.nuri.cc/ (새 창으로 열기) 이곳의 강의를 보고 있습니다.
꽤 가볍고, 재밋게 설명해 놓았더라구요. 멘트 센스는 2004년도의 그것이지만. 하핫.
이제 virtual을 쓸때까지 열공을...
그러고 보니 요새는 글쓰는일이 거의 없네요; 귀차니즘인지. 점점 쇠퇴해가는 느낌-_-;


rss