*모든 자료는 smile han(한성현 교수님) 수업시간에 나온 자료입니다*\
private(프라이벗 은 디폴드 값으로 써도되고, 안써도 된다.
private 대신, public을 쓰면 전체적으로 접근이 가능해서 오류가 나지않고, 나이를 찍어볼수 있었다. (지역->전역 느낌)
하지만, c++에선 캡슐화를 중요하게 생각하기에, private를 많이 쓰고, 이걸 쓴다면 class문내부에서만 쓸 수 있게된다.
기본적으로 c++에선 접근 권한이 3가지가 있다. 외부에서 접근이 불가능한 private, protected와 외부에서도 접근이 가능한 public이 있다.
언어별 접근권한. 현광펜 하이라이트는 디폴드이다. ( 디포트로 사용하는 속성이 다르다). 현재c++에선 private,public,protected이렇게 3개만 사용한다.
누구나 접근 가능할떄는 public을 쓰고,
캡슐화를 통해 외부에 접근하지 못하게 하는 private.
자식클래스만 접근가능한 protected가 있다.
public안에get,set함수를 썻다, get는 출력할떄,set는 불러올떄 쓴다. coco.setAge(3);을 써서 나이를 3살로 설정후, coco.getAge를 써서 출력해냈다.
3은argument.a는 parameter이다.
함수를 만드는것을 정의 , 첫번쨰줄에 쓰는 것(미리 컴파일러에게 아렬주는것),사용법을 함수의 도움말,선언,prototype이라고 한다.
코드 짜기, 선언, 정의 예제.
2가지방법으로 선언 가능하다.
-=private, +=public접근속성을 야기한다.
class다이어그램.
-----------------------------
Dog
__________________
-age:int
__________________
+getAge()
+setAge()
__________________
getAge와 setAge를 밖으로 끄집어 내서 쓸떄는 소속을 명시해야한다.
범위지정연산자= 을쓸떈 지역변수를 쓸떄이고. ::콜론을 2번쓰면 밖에있는 전역변수에 접근할때쓴다.(블록밖에있는것에 접근할때)
std namespace를 쓸떄는 동그라미 쳐저있는 2가지 방법으로 하는것이좋다.
aa,bb를 헤더파일을 만든후, aa엔
namespace AA,
bb.h엔
namespace B를 써서 각자의 동네를 만든후,
다시 돌아와std::cout << ::AA::add(1, 2);, std::cout << ::BB::add(1, 2);
를 각 각 씀으로 하나는 aa.h에더파일에 있는자료, 하난bb.h에 있는자료를 불러와서 값이 다르게 나오게 된것이다. 그리고 이 소스에 직접적으로 add를 만들어 불러써도 된다는것도 알수 있다. namespace는 이렇듯, 자신의 동네를 만들때 사용한다. namespace는 여러사람이 작업할떄 혹시라도 함수명이 겹치거나 했을떄 오류가 나지 않게끔 할수있다.
그에 대한 설명이다.
클래스 다이어그램이다. 이거 문젝 무조건 나온다.
integer
-------
-val: int
--------------
+getVal()
+setVal()
_________
챗gpt에게 만들어달라고 해보았다.
멤버함수를class안에 정의하면 자동으로 inline함수가 된다.(컴파일러가 판단해서 디폴드값으로 넣어줌)
c,c++에서는 포인트 객채의경우 화살표를 사용한다.
소스 고치기
#include<iostream>
using std::cout
;
class Dog {
private:
int age;
public:
int getAge();
void setAge(int a);
};
int Dog::getAge() { return age; }
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog happy; // Dog class의 happy객체 정의
Dog.age=2; //① Dog는
happy.age=3; //② age는 private멤버로 클래스 밖에서 접근 불가
cout << happy.age; //③ age는 전용멤버로 접근 불가
return 0;
}
고치지않은 오류뜨는소스.
--------------------------------------------------------------------------------------------------------------------
#include<iostream>
using std::cout
;
class Dog {
private:
int age;
public:
int getAge();
void setAge(int a);
};
int Dog::getAge() { return age; }
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog happy; // Dog class의 happy객체 정의
happy.setAge(3); //② age는 private멤버로 클래스 밖에서 접근 불가
cout << happy.getAge(); //③ age는 전용멤버로 접근 불가
return 0;
}
고친소스.
만들어보기 중간.
#include<iostream>
class Man {
private:
int age;
double weight;
public:
int getAge() {return age;}
void setAge(int a) {age = a;}
};
int main()
{
Man kim;
kim.setAge(20);
std::cout << kim.getAge();
return 0;
}
+몸무게
#include<iostream>
class Man {
private:
int age;
double weight;
public:
int getAge() {return age;}
void setAge(int a) { age = a; }
double getweight() { return weight; }
void setweight(double w) { weight = w; }
};
int main()
{
Man kim;
kim.setAge(20);
kim.setweight(65.7);
std::cout << "나이:"<<kim.getAge() <<",몸무게:"<< kim.getAge();
return 0;
}
+웃는행동 쓰기. 개행을 하려면 <<std::endl;을 쓰면 된다.
#include<iostream>
class Man {
private:
int age;
double weight;
public:
int getAge() {return age;}
void setAge(int a) { age = a; }
double getweight() { return weight; }
void setweight(double w) { weight = w; }
void smile() {
std::cout << "ㅎㅎㅎ\n";
}
};
int main()
{
Man kim;
kim.setAge(20);
kim.setweight(65.7);
kim.smile();
std::cout << "나이:" << kim.getAge() << ",몸무게:" << kim.getAge() << std::endl;
kim.smile();
return 0;
}
자동inline함수이다.
https://pythontutor.com/render.html#mode=display
c++ 코드가 어떻게 동작하는지 순서를 알려주는 사이트이다. (python tutor)
밖으로뺴서 ilcline 쓰지않기.\
밑으로빼고, ;세미클론작성후, 밑에 뺸 소스에 Man::만 적으면 된다.
#include<iostream>
class Man {
private:
int age;
double weight;
public:
int getAge();
void setAge(int a);
double getweight();
void setweight(double w);
void smile();
};
int Man:: getAge() { return age; }
void Man::setAge(int a) { age = a; }
double Man::getweight() { return weight; }
void Man::setweight(double w) { weight = w; }
void Man::smile() { std::cout << "ㅎㅎㅎ\n"; }
int main()
{
Man kim;
kim.setAge(20);
kim.setweight(65.7);
kim.smile();
std::cout << "나이:" << kim.getAge() << ",몸무게:" << kim.getAge() << std::endl << '\n';
kim.smile();
return 0;
}
class다이어그램.
+______________________________+
Man
+______________________________+
-age:int
-weight:double
(멤버변수)
+______________________________+
+getAge()
+setAge()
+getweight()
+setweight()
+smile()
+endOfyear
(멤버함수)
+--------------------------------------------------+
#include<iostream>
class Man {
private:
int age;
double weight;
public:
int getAge();
void setAge(int a);
double getweight();
void setweight(double w);
void smile();
void endOfyear();
};
int Man:: getAge() { return age; }
void Man::setAge(int a) { age = a; }
double Man::getweight() { return weight; }
void Man::setweight(double w) { weight = w; }
void Man::smile() { std::cout << "ㅎㅎㅎ\n"; }
void Man:: endOfyear(){ age = age + 1; }
int main()
{
Man kim;
kim.setAge(20);
kim.setweight(65.7);
kim.smile();
std::cout << "나이:" << kim.getAge() << ",몸무게:" << kim.getweight() << std::endl << '\n';
kim.smile();
kim.endOfyear();
std::cout << "나이:" << kim.getAge() << ",몸무게:" << kim.getweight() << std::endl << '\n';
kim.smile();
return 0;
}
나이를 먹는 소스.