class Person
{
private:
char *name; //나이
public:
Person(char *myname)
{
name = new char[strlen(myname)+1];
}
~Person()
{
delete []name;
}
void WhatYourName() const
{
cout<<"My name is "<<name<<endl;
}
};
class UnivStudent : public Person
{
private:
char *major;
public:
UnivStudent(char *myname, char *mymajor)
: Person(myname)
{
major=new char[strlen(mymajor)+1];
strcpy(major,mymajor);
}
~UnivStudent()
{
delete []major;
}
void WhoAreYou() const
{
WhatYourName();
cout<<"My major is " <<major<<endl<<endl;
}
};
int main()
{
UnivStudent ustd1("Lee","Computer emg.");
ustd1.WhoAreYou();
UnivStudent ustd2("Yoon","Electronic eng.");
ustd2.WhoAreY
}
코린이 이고 열혈 시리즈로 공부했음 문법만. 겉핥기식으로 말이야
빨간색 부분만 봐주셈.갤 다음페이지인가 있는 글들중에 나랑 비슷하게 문자열 상수를 char *a로 받고 오류 왜나냐고 올리고 질문글등이 몇개 있던데
나도 질문좀 한다..나는 근데 이거 참고로 에러가안남. 비주얼 스튜디오 2010 버전쓰고 있는데 버전탓인가?
프갤에서 윤성우 센세 추천하지 않는다는건 며칠전부터 알게되었는데 그래도 난 강의 쉽게 가르쳐주고 코린이니가 가리는게 어딨어 하는 마음으로 배우기도했는데
진짜 그때문인지 잘못된건지 이런 문법이 다르다니까 지금 혼란이 와서 죽겠다 ㅠㅠ
책에도 const 붙이라는 말은 안되어있는데 도대체 뭐가 잘못된거냐 코린이 답변좀 해주삼;;
뭐가문제?
ㄴ글을 내가 이상하게 썼나.. 문자열 상수를 받을때 다른갤러들 답변보니까 const char*a 는 이런식으로 const 선언 해줘야하는데 내 가 올린 소스를보면 const 선언을 안하고 생성자를 생성하거나 다른소스에는 함수를 호출하고 있는데..문제는 에러가 안난다는거임..그럼 문법적인 문제가 없다는 소리같은데 const 붙여주는게 맞다고하니까 헷갈리는거임
const는 있어도 없어도 됨
문법적인에러는 아님
ㄴ 그런데 아까 프갤에서 const 선언이 없어서 에러난다고 글올리는 사람들은 뭐가 문제야?
const 쓰면 될듯 이게 컴파일러마다 문자열 상수 -> char * 변환이 허용되는지 안허용되는지 다름
옵션 주는거에 따라서 또 달라지고, gcc 계열은 보통 char *가 되는걸로 알고있고 VS는 예전에 됬다가 요새는 깐깐하게 잡는듯
https://dev.krzaq.cc/post/stop-assigning-string-literals-to-char-star-already/
요런거 참고하면 될듯. 아마 C++98 까지는 허용이었다가 C++11부터 안되는걸로 알고있음
그런데 저렇게 쓴 코드가 워낙 많으니까 컴파일러에서 (암묵적으로) 허용을 해주는거고 그래도 warning은 띄울거같은데
아니 영어네...형님 일단 감사합니다 감사한데 영어를 잘하는게 아니라서 소스만 봤는데여 링크 마지막에 있는 소스
char const * foo = "bar"; 이거랑 const char *foo="bar" 이랑은 다르지 않나여 그러니까 링크에서는 char const * foo = "bar"; 이거는 맞다고 나오는데 const char *foo 이거는 맞는지 몰겠삼;;
똑같아
int const 랑 const int 랑 같음
그리고 코린이라그런데 c++98이라던지 c++11 이라던지 이게뭐임? 버전같기도한데..c++을 그냥사용하는게 아니라 버전을 설치해줘야하는거임?;
차이가 있는건 int const *랑 int * const 같은거
C++ 문법이 계속 개정되고 있음. 비주얼스튜디오는 해당 버전이 나온 해의 최신 표준을 지원해주는거고 (ex. VS 2017이면 C++14 지원)
gcc 같은 경우는 어떤 표준을 이용할건지 --std= 옵션으로 지정해줄수 있음
다르지 않나여? const char *a 이경우에는 const라는 문법이 상수화 목적의 문법이 아니고 그냥 값의 변경을 허용하지 않겠다는 문법이고 char const *a 같은경우에는 상수화 문법인걸로아는데..엄연히 다른거아니에여?
그 포인터 상수화 말하는거면 char * const임
const char *랑 char const *는 똑같음 C++ 표준읽자
아 코린이라 댓글수준 높아서 이해하기 힘드넹
http://duramecho.com/ComputerInformation/WhyHowCppConst.html
야 근데 줄게 영어자료밖에 없다 좀 미안하네
우리게이에게 딱맞는 자료를 찾았다
http://soen.kr/lecture/ccpp/cpp2/15-1-1.htm
http://soen.kr/lecture/ccpp/cpp2/15-1-2.htm
win api센세 맨날 감사합니다
형님 고마워 한번 읽어보고 올겡
저걸 잘 이해하면 이런 드립에 웃을수 있을것
아 형님 const int *a랑 int const *a랑은 차이가 있고 타입이 char* 인경우에는 차이가 없는거에요? 이거 신기하네 첨알음
근데 올려주신 링크에는 char const 선언에 관한 얘기는 없어서 아쉽네 같다길래 왜 같은지 궁금했는데
아니요
const int 랑 int const랑 같다구요
왜그래요 ㅜㅜ
const int *랑 int const *랑 같고 int * const 같은게 다르다구요 ㅜㅜ
아 이게 한끝차이라 내가 잘못보고 있었어요 형님 int const * 이거랑 int * const이거랑 너무 비슷해보여서 착각하고있었음 그래서 분명 const int *랑 int * const 랑 다른 건데 왜 같다고 하시지 라고 생각했었는데
저 문서보고 const가 타입 뒤에도 올 수있다는걸 알았음..
아 그럼 결론은 아까 영어문서에 char const * foo = "bar"; 이것도 내가 잘못 본거군 결국 같은 표현이고
결국은 내 vs가 구버전이라 문자열 상수를 저장할때 char * 도 허용한다는 말인거같은데
원래 const char* 또는 char const* 가 맞는거다. 윤성우책이 쓰레기라 잘못 그르치는거. 원래는 char* 안되는게 맞는거다 - return 0;
그리고 소엔은 틀딱이라 보지 않는게 좋다 - return 0;
커헠형님 근데 위 형님 말씀대로라면 잘못 가르치는 문법이라기보다는 그 c++버전이 진화?해서 그렇게 된거아니에여? 혹은 컴파일러가 내꺼처럼 구형이라던가...
소엔 틀딱인데 한글자료 좋은게 저것박에없음 그리고 둘다 맞는말임 원래 표준을 일관성없이 잘못만들어서 나중에 고친거지
그렇기때문에 const 쓰는 습관을 들이도록 합시다
형님 좋은 답변 정말 고마워요