C++ study(3)

김혜원·2023년 1월 22일
0

c++study

목록 보기
3/11

Private

private으로 설정된 멤버는 변수, 함수 모두 class밖에서는 '.' 또는 '->'연산자를 사용해 바로 접근할 수 없다.
private 멤버 변수에 바로 접근을 하지 못해 매개체 역할의 멤버 함수가 필요하다.

#include <iostream>
using namespace std;

class myclass
{
private:
	int m, n;

public:
	void setM(int);
	void setN(int);
	int sum();
	void print();
};

int main()
{
	myclass A, B;
	A.setM(3);
	A.setN(7);
	B.setM(5);
	B.setN(-12);
	cout << "A의 합:" << A.sum() << endl;
	cout << "B의 합:" << B.sum() << endl;
	A.print();
	B.print();

	return 0;
}
void myclass::setM(int m1)
{
	m = m1;
}
void myclass::setN(int n1)
{
	n = n1;
}
int myclass::sum()
{
	return m + n;
}
void myclass::print()
{
	cout << "m:" << m << ",n:" << n << endl;
}

private한 "멤버 함수"를 사용하는 경우, 해당 class 함수 안에서만 반복적으로 쓰일 때 private으로 만든다.

inline

함수 선언 시 맨 앞에 써주면 "inline function" 이 된다. 정의부에는 쓰지 않아야 하며, 선언과 정의를 몰아서 코딩했으면 맨 앞에 한 번 써 주면 된다.

함수의 내용에 영향을 주지는 않고, 컴파일 방식에 영향을 준다. 컴파일 도중 원래 함수를 부르면 매개변수를 가지고 그 함수가 있는 구문을 찾아가야 하는데, inline function은 이를 생략하기 위해 함수 내용을 부른 부분에 그대로 복사붙여넣기 하는 식으로 끼원허어 컴파일 시간을 단축시킨다. 단, 많이 사용 시 프로그램의 용량이 늘어나 내용이 짧으면서 많이 사용되는 함수에 사용한다. class의 멤버 함수도 인라인 함수일 수 있다.

#include <iostream>
using namespace std;
inline int sum(int, int);

int main()
{
	cout << sum(3, 5) << endl;

	return 0;
}
int sum(int a, int b)
{
	return a + b;
}

static

해당 개체를 정적으로 만든다. static 변수는 scope를 나가도 접근이 어려워질 뿐, 값이 사라지지는 않는다.

class안의 static 멤버 변수, 함수.

  • static 멤버 변수는 해당 class 모두가 값을 공유하게 되는 개념.
    main() 함수 시작 전 한 번 이상의 초기화가 필요하다.
  • static 멤버 함수는 자신과 같은 class의 멤버 변수라도 접근할 수 있는 변수가 static 멤버 변수로 한정.
    public일 경우 변수, 함수 상관없이 object 없이 불러낼 수 있다.
#include <iostream>
using namespace std;

class testStatic{
private:
static int static_n;
int auto_n;
public:
static void set_static(int);
static int get_static();
void set_auto(int);
int get_auto();
};

int testStatic::static_n = 0;

int main(){

testStatic A, B;
A.set_static(5);
A.set_auto(3);
cout << "A.static_n: " << A.get_static() << endl;
cout << "A.auto_n  : " << A.get_auto() << endl;
B.set_auto(-2);
cout << "B.static_n: " << B.get_static() << endl;
cout << "B.auto_n  : " << B.get_auto() << endl;
testStatic::set_static(10);
cout << "static_n  : " << testStatic::get_static() << endl;

return 0;
}

void testStatic::set_static(int n){
static_n = n;
}

int testStatic::get_static(){
return static_n;
}

void testStatic::set_auto(int n){
auto_n = n;
}

int testStatic::get_auto(){
return auto_n;
}

0개의 댓글