23.03.30 Day43

오윤범·2023년 3월 30일
0

C++ 프로그래밍

소멸자

#include<iostream>
using namespace std;
class ctest
{
private:
	int num;
public:
	ctest(int n)
	{
		num = n;
		cout << num << " CTest 생성" << endl;
	}
	~ctest()
	{
		cout << "CTest 소멸" << endl;
	}
};
class ctestsub :public ctest
{
private:
	int subnum;
public:
	ctestsub(int n, int subnum):ctest(n) // ctestsub의 매개변수로 받는 n,subnum 중 n이 ctest의 생성자로 초기화됨
	{
		this->subnum = subnum;
		cout << this->subnum << " CTestSub 생성" << endl;
	}
	~ctestsub()
	{
		cout << "CTestSub 소멸" << endl;
	}
};
int main()
{
	ctest c(10);
	ctestsub s(1,10);//1,10 --> 1이 ctest의 num으로, 10이 ctestsub의 subnum으로 들어감
	return 0;
}

가상 소멸자

#include<iostream>
using namespace std;
class ctest
{
private:
	int num;
public:
	ctest(int n) :num(n)
	{
		cout << num << " CTest constructor" << endl;
	}
	virtual ~ctest() // 가상함수로 선언시에 소멸될때 호출되고 ~ctest()로 선언 시 호출 안됨
	{
		cout << "CTest destrcutor" << endl;
	}
	void func()
	{
		cout << "CTest func()" << endl;
	}
	virtual void vfunc()//가상함수 
	{
		cout << "CTest vfunc()" << endl;
	}
};
// 가상 소멸자를 사용하면 기본 클래스의 소멸자가 호출되면
// 파생 클래스의 소멸자도 호출되도록 보장할 수 있습니다.
class ctestsub :public ctest
{
private:
	int snum;
public:
	ctestsub(int n1, int n2) :ctest(n1), snum(n2)
	{
		cout << snum << " CTestSub constructor" << endl;
	}
	~ctestsub()
	{
		cout << "CTestSub destructor" << endl;
	}
	void vfunc()
	{
		cout << "CTestSub func()" << endl;
	}
};
int main()
{
	/*ctest c1(10);
	cout << "=========" << endl;
	ctestsub c2(1, 10);
	cout << "========" << endl;*/
	ctest* ps = new ctestsub(3, 33);
	delete ps;
	return 0;
}

참조와 가상함수

#include <iostream>
using namespace std;

class First
{
public:
	void FirstFunc()
	{
		cout << "FirstFunc()" << endl;
	}
	virtual void SimpleFunc()
	{
		cout << "First's SimpleFunc()" << endl;
	}
};
class Second : public First
{
public:
	void SecondFunc()
	{
		cout << "SecondFunc()" << endl;
	}
	virtual void SimpleFunc()
	{
		cout << "Second's SimpleFunc()" << endl;
	}
};
class Third : public Second
{
public:
	void ThirdFunc()
	{
		cout << "ThirdFunc()" << endl;
	}
	virtual void SimpleFunc()
	{
		cout << "Third's SimpleFunc()" << endl;
	}
};
int main(void)
{
	Third obj;
	obj.FirstFunc();//상속하고있는 상위 클래스의 메소드에 접근 가능
	obj.SecondFunc();
	obj.ThirdFunc();
	obj.SimpleFunc();

	Second& sref = obj;
	sref.FirstFunc();
	sref.SecondFunc();
	sref.SimpleFunc();//simpleFunc는 가상함수로 선언되어있어 처음 생성된 객체 기준

	First& fref = obj;
	fref.FirstFunc();
	fref.SimpleFunc();
	return 0;
}

Operator

#include<iostream>
#include<cstring>
using namespace std;
class myclass
{
	int num1, num2;
	const char* name;
public:
	myclass(int anum1=0, int anum2=0, const char* aname=nullptr) :num1(anum1), num2(anum2), name(aname) {}
	void showdata()
	{
		cout << num1 << " " << num2 << " " << name << endl;
	}
};
int main()
{
	cout << "=============" << endl;
	myclass c(10, 20, "오윤범");
	c.showdata();
	cout << "=============" << endl;
	myclass cm(c); // c객체의 정보를 담는 myclass cm 객체 생성 
	cm.showdata();
	cout << "=============" << endl;
	myclass cm1;
	cm1 = cm; // 객체끼리 대입연산 가능
	cm1.showdata();
	return 0;
}

Operator (클래스끼리 더하기)

#include <iostream>
using namespace std;

class Point
{
private:
	int xpos, ypos;
public:
	Point(int x = 0, int y = 0) : xpos(x), ypos(y)
	{  }
	void ShowPosition() const
	{
		cout << '[' << xpos << ", " << ypos << ']' << endl;
	}
	Point operator+(const Point& ref)    //operator+라는 이름의 함수
	{
		Point pos(xpos + ref.xpos, ypos + ref.ypos);
		return pos;
	}
};
int main(void)
{
	Point pos1(3, 4);
	Point pos2(10, 20);
	Point pos3 = pos1.operator+(pos2); // pos1과 pos2의 xpos,ypos값을 더함

	pos1.ShowPosition();
	pos2.ShowPosition();
	pos3.ShowPosition();
	return 0;
}

함수 포인터

#include<iostream>
using namespace std;
int add(int n1, int n2)
{
	return n1 + n2;
}
int sub(int n1, int n2)
{
	return n1 - n2;
}
int main()
{
	int res;
	int (*fp)(int, int);//함수포인터 선언
	fp = add;
	res = fp(10, 20);
	cout << "add====" << endl;
	cout << res << endl;

	fp = sub;
	res = fp(10, 20);
	cout << "sub====" << endl;
	cout << res;
	return 0;
}

프로그래머스

순서쌍의 개수

def solution(n):
    answer = 0
    for i in range(1,n+1):
        if n%i==0:
            answer+=1
    return answer

solution(100)

--> 순서쌍의 개수 = 약수의 개수 임을 알고 모르고의 차이가 문제풀이에 큰 차이를 가져옴

0개의 댓글