본문 바로가기
코스웨어/14년 스마트컨트롤러

2014.10.17 일일 보고서 김진철

by 알 수 없는 사용자 2014. 10. 17.
728x90
반응형
Java


static로 선언하면 객체를 생성안해도 할당가능


접근제어 지시자


protected는 상속 받은 자식 클래스에게는 접근을 허용하지만 상속받지 않은 클래스에서는 접근을 불허한다.

#include <iostream>
using namespace std;
class Test;

class Smart
{
                 private:
                                 int iNum2;
                 public:
                                 int iNum1;
                                 //friend Test;
                 protected:
                                 int iNum3;
};

class Test : public Smart
{
                 public:
                                 //Smart obj;
                 public:
                                 //friend Smart;
                                Test()
                                {
                                                iNum1=100;
                                                 //iNum2=200;        // private 접근 불가하지만 friend로 서로를 연결해주면 접근할수가 있다.
                                                iNum3=300;
                                }
};
int main()
{
                Test obj;
                obj.iNum1=100;
                 return 0;
}



<소스코드>




#include <iostream>
using namespace std;

class Base
{
private:
                 int num1;
protected:
                 int num2;
public:
                 int num3;

                Base() : num1(1),num2(2),num3(3)
                {
                }
};

class Derived : protected Base           // private로 Base를 상속받을경우 접근이 불가하기에 사실상 의미없는 상속이라 할수가 있다. public로 Base를 상속 받을 경우는 접근 속성을 그대로 상속한다.
{
};

int main()
{
                Derived drv;
                cout<<drv.num3<<endl;      // Base 클래스를 protected 로 상속받았기에 num3도 protected로 선언되어서 외부에서 접근 불가하다.
                 return 0;
}



C++에서의 상속은 대부분 public 상속을 사용한다.

<소스코드>





IS-A 관계

A는 B이다. ( A : 자식 클래스 , B : 부모 클래스 상속 관계)
ex)
Smart : Car
{
}

HAS-A 관계
A는 B를 가지고 있다. ( 상속관계가 아닌 내부에 만들어져있다는 뜻 구성 관계)
ex)
Smart
{
     Car obj;
}


오버라이딩

이름은 같지만 인자로 구분하는것을 오버로딩

이름과 인자도 같을때는 오버라이딩

상위 클래스에 있는 함수를 덮어섰다는건 재정의했다는 뜻임 오버라이딩이라 한다.


class Car
{
                 public:
                                 char Color[100];
                                 int Tire;
                                 int Speed;
                                 int Gas;
                 public:
                                Car()
                                {              Init();
                                                cout<< "Car 디폴트 생성자" <<endl;
                                }
                                Car( char *cpColor)
                                {
                                                Init();
                                                strcpy(Color,cpColor);
                                                cout<< "Car 생성자" <<endl;
                                }
                                ~Car()
                                {
                                                cout<< "Car 소멸자" <<endl;
                                }
                                 void Print()
                                {
                                                cout<< "Tire : "<<Tire<<", Color : " <<Color<<endl;
                                }
                 private:
                                 void Init()
                                {
                                                Color[0]=0;
                                                Tire=0;
                                                Speed=0;
                                                Gas=0;
                                }
};
 

class Tico : public Car
{
                 public:
                                Tico() : Car( "Pink")
                                {

                                                cout<< "Tico 디폴트 생성자" <<endl;
                                }
                                ~Tico()
                                {
                                                cout<< "Tico 소멸자" <<endl;
                                }
                                 void Print()            // 상위 클래스에 있는 함수를 덮어섰다는건 재정의했다는 뜻임 오버라이딩이라 한다.
                                {
                                                cout<< "나는 Tico 입니다." <<endl;
                                }
};
  




가상 함수

함수 오버라이딩을 할때 사용함
부모 클래스 포인터 변수를 만들어서 자식 클래스의 주소를 저장하면 자식 영역을 사용할 수 없다.    
이를 해결하기 위해서는 가상 함수를 선언해서 접근을 할수가 있다.



















리턴 받은 RFID 해석












소스코드 추가 부분





<소스코드>






728x90