22.03.28 Day41

오윤범·2023년 3월 28일
0

C++ 프로그래밍

Const

#include<iostream>
using namespace std;
class sosimple
{
private:
	int num;
	int num1 = 100;
	const int n = 10;
public:
	sosimple(int n) :num(n) {}
	sosimple& addnum(int n)
	{
		num += n;
		return *this;
	}
	void showdata()
	{
		cout << "show data:" << num << endl;
	}
	void showdata() const // const 키워드가 붙은놈을 처리
	{
		cout << "const show data:" << num << endl;
	}
};
void yourfunc(const sosimple& obj) // const 키워드 붙은놈 처리
{
	obj.showdata();
}
int main(void)
{
	sosimple obj1(2);
	const sosimple obj2(7);

	obj1.showdata();
	obj2.showdata();

	yourfunc(obj1);
	yourfunc(obj2);
	//obj.addnum(20);

	return 0;
}

Friend

#include<iostream>
using namespace std;

class point;
class pointop
{
private:
	int opcnt;
public:
	pointop() : opcnt(0) {}
	point pointadd(const point&, const point&);
	point pointsub(const point&, const point&);
	~pointop()
	{
		cout << "Operation times:" << opcnt << endl; // 소멸시 계산 횟수 반환
	}
};

class point
{
private:
	int x;
	int y;
public:
	point(const int& xpos, const int& ypos) :x(xpos), y(ypos) {}
	friend point pointop::pointadd(const point&, const point&);
	friend point pointop::pointsub(const point&, const point&);
	friend void showpointpos(const point&);
};
point pointop::pointadd(const point& pnt1, const point& pnt2)
{
	opcnt++;
	return point(pnt1.x + pnt2.x, pnt1.y + pnt2.y);
}
point pointop::pointsub(const point& pnt1, const point& pnt2)
{
	opcnt++;
	return point(pnt1.x - pnt2.x, pnt1.y - pnt2.y);
}
int main(void)
{
	point pos1(1, 2);
	point pos2(2, 4);
	pointop op;

	showpointpos(op.pointadd(pos1, pos2));
	showpointpos(op.pointsub(pos2, pos1));
	return 0;
}
void showpointpos(const point& pos)
{
	cout << "x:" << pos.x << ", ";
	cout << "y: " << pos.y << endl;
}

Static

#include<iostream>
using namespace std;

void static_counter()
{
	static int cnt=0;
	cnt++;
	cout << "Current static cnt: " << cnt << endl;
}
void counter()
{
	int cnt = 0;
	cnt++;
	cout << "Current cnt: " << cnt << endl;
}
int main(void)
{
	for (int i = 0; i < 10; i++)
	{
		static_counter();
		counter();
	}
	return 0;
}

1) static 으로 선언된 cnt는 변수가 생성되고 초기화가 되는것이 아니라 프로그램이 종료될때 까지 계속해서 해당 변수를 사용하기 때문에 cnt 가 계속 증가되는 모습을 볼 수 있음
2) 반면에 static이 아닌 int cnt =0; 으로 선언한 cnt 변수는 함수가 호출될때마다 계속해서 cnt가 초기화되는것을 확인할 수 있음

상속(Inheritance)

#include<iostream>
using namespace std;
class super
{
public:
	super() { cout << "Super()" << endl; }
	~super() { cout << "~Super()" << endl; }
};
class sub :public super
{
public:
	sub() { cout << "Sub()" << endl; }
	~sub() { cout << "~Sub()" << endl; }
};
int main()
{
	cout << "Start" << endl;
	sub obj;//sub의 생성자 호출 -> Super을 상속받기에 sub 호출시 super 생성자또한 호출됨
	cout << "Stop" << endl;
	return 0; // 소멸 시 자식 class의 객체가 먼저 소멸됨
}

1) sub 생성자 호출시에 Super을 상속받기때문에 부모클래스인 Super의 생성자도 호출됨
2) 소멸시에는 자식 class의 객체가 먼저 소멸됨

자식 클래스에서는 부모 클래스의 private으로 선언된 멤버 변수로 접근이 불가능하기 때문에 부모 클래스의 객체를 생성하면서 private으로 선언된 멤버 변수를 초기화 해줘야함

Protected

#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 {};
int main(void)
{
	derived drv;
	cout << drv.num3 << endl;
	return 0;
}

1) base 클래스를 protected로 상속받은 derived 클래스
2) derived 클래스 객체 drv를 생성하고 base에서 public으로 선언된 num3에 접근하려고 하면
3) protected로 base 클래스를 상속받았을 때 base에 있는 public 멤버 변수인 num3에 직접 접근이 불가하다.
4) 해당 멤버변수에 접근하기 위해서는 base를 public으로 상속받거나 base객체를 만들어서 num3 멤버변수에 접근해야 한다.

  • base 객체를 생성하여 소스 수정

#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 {};
int main(void)
{
	derived drv;
	base b;
	cout << b.num3 << endl;
	return 0;
}

--> 다음과 같이 수정하게되면 base의 멤버 변수에 접근하여 num3 값인 3이 출력되는것을 볼 수 있다.

프로그래머스

특정 문자 제거하기

def solution(my_string, letter):
    answer=''
    arr1=list(my_string)
    for i in my_string:
        if i==letter:
            arr1.remove(letter)
    for i in range(len(arr1)):
        answer+=arr1[i]
    return answer

solution("BCBdbe","B")

--> 되게 멍청하게 풀었다. python 에서 지원하는 static으로 쉽게 풀 수 있음

def solution(my_string, letter):
    return my_string.replace(letter, '')

0개의 댓글