공부/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();
}
구글에 찾아도 안나와서 내가 돌려가며 검증했다.
참고로 위 아래 기법을 교차로 써도 돌아는 간다. 만 하지말자 ㅎㅎ