c++공부

1205 2교시

JaeHyunShin 2019. 12. 5. 17:52

++(++a)질문  

객체지향 상속

-> 속성 상속받고 자신의 특성 추가

 

*업캐스팅 -->포인터 형변환

 

pc 

char형 포인터는 1 byte에 대해 작업 

 

100->101->102 

만약 int형 포인터로 작업하면 4byte씩 수정

char 형 포인터 for문-->1byte씩 4번 

 

같은 memory내용에 대해 포인터의형에따라 메모리 읽는바이트가달라

 

*(pc+0)

*(pc+1)

 

메모리는 허랅받았으면 

동적할당등ㅇ로

포인터의 자료형에 따라

어떤 포인터로 메모리에 접근하는지가 중요해 

 int data=0x 

 char * pc;

pc=(char*)& data;
합법적으로 쓰지 못하는 3byte공간마저 쓰려고 하면 에러가 생긴다

 

--> 

 

segementation fault-->ptr잘못써서

char a='A';

int& pi=(int* )&a;

//다운캐스팅인가 이게  

 

pBase->showColorPoint()에러나는 이유 생각하기

pBase는 Point형인데 CirclePoint형의 메소드에 접근하려고 시도했기 떄문이다

q

다운캐스팅 부 모->자식 (더 커지는꼴) pDer->마지막줄? 안되는이유인가 한후에 

->업캐스팅과 달리 명시해야 한다 

 

전반부

Point클래스의 변수들  접근제어자 private이었는데 protected로 바꿈

 

#include 
#include 
using namespace std;
class Point{
int x,y;



public:
void set(int x,int y){

this->x=x;
this->y=y;
}
void showPoint(){

cout<<"("<<x<<","<<y<<")"<<endl;

}
}


class ColorPoint:public Point {

//oop개념 안쓴다면 x y showPoint 등 다 추가해야해 
string color;
public:
void setColor(string col){
this->color=col;

}
void showColorPoint(){

cout<<color<<":"<<endl;
showPoint();

}
}
//같은 메ㄹㅁ
int main(){

ColorPoint cp;
//부모 클래스의 메소드 호출
ColorPoint* pDer=(Point*)&cp;
//upcastijg은 명식적 표시 안해도 ㄱㅊ



Point* pBase=pDer;




pDer->set(3,4);
pBase->showPoint();
//어느지점으로 가는지메모리상에 표시하기 위함

ColorPoint* pDer=(ColorPoint*)pBase;
pDer->setColor("red");
pDer->showColorPoint();

/*
cp.set(3,4);
cp.setColor("Red");
cp.showColorPoint();
*/
}

pg 18

예제 8-2

p.x p.y왜 주석처리 하신 거지 

어떻게 고치라고 엄밀히 하려면

 

부모 클래스의생성자와 자식클래스의 생성자가 모두실행되는가

자식클래스의 생성자만 호출될것인가 부모

답:둘다 호출된다;

 부모생성자가 먼저 불린다

pg 20잘보기

그림 8-14

 

컴파일러 가 자동으로 기본 생성자 안만들어줘 

 

 

 

 

 

'c++공부' 카테고리의 다른 글

1205 core요약 1교시  (0) 2019.12.05
10 31 수업내용 정리  (0) 2019.10.31