Woooniverse

[C++]상속 클래스의 기본생성자는 어떻게 해야될까? 본문

공부/C++

[C++]상속 클래스의 기본생성자는 어떻게 해야될까?

Woo宙 2021. 7. 7. 20:44
#include<iostream>
#include <string>

using namespace std;

class Printer {
private: 
	string model, printer, person;
public:
	Printer(string _model = "d_model", string _printer = "d_printer", string _person = "d_person") :
			 model(_model), printer(_printer), person(_person)
	{
	}
	 virtual void printInfo()
	{
		cout << model << endl << printer << endl << person << endl;
	}

};


class LaserPrinter: public Printer {
private:
	int LaserPower;
	int serial_number;

public:
	LaserPrinter(string _model = "d_model", string _printer = "요건몰랐지", string _person = "d_person", int _l_power=0, int _serialnumber=123456) :
		Printer(_model, _printer, _person)
	{
		LaserPower = _l_power;
		serial_number = _serialnumber;
	}

	void printInfo()override
	{
		Printer::printInfo();
		cout << LaserPower << endl << serial_number;
	}




		
};
int main()
{
	Printer Base;
	LaserPrinter me;

	Base.printInfo();

	me.printInfo();




}

요런 식으로 상속클래스에서도 초기화값을 넣어줘야되는건 좀 귀찮네,,,?

근뎅 이래야 에러가 안나고 나중에 편하다. 

위 방법이 직관적으로 통일되어서 좋은데 나는 상속클래스에서 초기화 또해주는게 넘나 귀찮다? 그럼 아래처럼 해라 

위보다 통일적으로 이쁘진 않다. 왜냐하면 

#include<iostream>
#include <string>

using namespace std;

class Printer {
private: 
	string model, printer, person;
public:
	Printer(string _model, string _printer , string _person) :
			 model(_model), printer(_printer), person(_person)
	{
	}
	Printer()
	{
		model = "d_model"; printer = "d_printer"; person = "d_person";

	}
	 virtual void printInfo()
	{
		cout << model << endl << printer << endl << person << endl;
	}

};


class LaserPrinter: public Printer {
private:
	int LaserPower;
	int serial_number;

public:
	LaserPrinter(string _model , string _printer , string _person, int _l_power, int _serialnumber) :
		Printer(_model, _printer, _person)
	{
		LaserPower = _l_power;// 요기서 부여해주고
		serial_number = _serialnumber;// 요기서도 
	}
	LaserPrinter()
	{
		LaserPower = 123; //요기선 초기화를 
		serial_number = 123456; //위처럼 딱 통일된 문법은 아니고 자식한테 이거저거 추가해주는 느김

	}

	void printInfo()override
	{
		Printer::printInfo();
		cout << LaserPower << endl << serial_number;
	}




		
};
int main()
{
	Printer Base;
	LaserPrinter me;

	Base.printInfo();

	me.printInfo();




}

구글에 찾아도 안나와서 내가 돌려가며 검증했다.

참고로 위 아래 기법을 교차로 써도 돌아는 간다. 만 하지말자 ㅎㅎ

Comments