[ C++�ŊJ�� ]
C++�̃R���X�g���N�^�ɂ���
�{�y�[�W�͂����ɏ��ЁuEffective C++�v����
C++�ł́A�N���X���`�����Ƃ��ɃR���X�g���N�^���`���Ȃ���A�R���p�C���������I�Ɉ����Ȃ��̃R���X�g���N�^����уR�s�[�R���X�g���N�^��⊮���܂��B
class Person { std::string name; };
�ƋL�q�����N���X�́A�f�t�H���g�R���X�g���N�^�A�f�t�H���g�f�X�g���N�^�A�f�t�H���g�R�s�[�R���X�g���N�^�A�f�t�H���g������Z�q�����R���p�C���ɂ���ĕ⊮����A�����ȉ��̃R�[�h�Ɠ����ɂȂ�܂��B
class Person { std::string name; public: Person() {} ~Person() {} Person(const Person& aPerson) { ... } Person& operator=(const Person& rhs) { ... } };
�����ŁA�����o�[�ϐ���std::string& name��const std::string�ł���ƕύX��
�R�s�[�R���X�g���N�^�������
void func1(Person a); Person func2(); Person p1; Person p2(p1); // �R�s�[�R���X�g���N�^�����s�A--- (1) Person p3 = p2; // �R�s�[�R���X�g���N�^�����s�A������Z�q���͎��s����Ȃ� func1(p3); // �R�s�[�R���X�g���N�^�����s�A�����ւ̒l�n�� p1 = func2(); // �R�s�[�R���X�g���N�^�����s�A�߂�l�̒l�n��
std::string�������o�[�Ɏ��N���XPerson���l���܂��B
class Person { std::string name; public: Person(const std::string &aName) { name = aName; } };
����ňꌩ�悢�悤�Ɏv���܂��B�������A���̃R�[�h�ł͗]���ȏ������������܂��B
2.�̂Ƃ��ɁAstring�N���X�̃R���X�g���N�^�����s����܂��B�����ăR���X�g���N�^�{�̂̎��s�ɂ����āA=���Z�q���Ăяo����string�C���X�^���X���R�s�[���܂��B���������āA2.�Ŏ��s�����R���X�g���N�^�͖��Ӗ��ł��B
class Person { std::string name; public: Person(const std::string &aName) : name(aName) {} };
class Person { std::string name; public: Person() : name() {} };
class Student : public Person { int id; public: Student() : Person(), id(0) {} };
������1�̃R���X�g���N�^�́A�v�������Ȃ��ϊ����s�����Ƃ�����܂��B
class Counter { int count; public: Count(int init) : count(init) {} };
�ƈ�����int�^��1���R���X�g���N�^���`�����N���X������ƁA�ȉ��̂悤�ȋǖʂ�Counter�C���X�^���X����������܂��B
Counter pageHit; : pageHit = 14;
�E�Ӓl��int�^��14��Counter�ɕϊ����悤�Ƃ��܂��B���̍�Counter(14)���Ă�邱�ƂɂȂ�܂��B���̂Ƃ��A�R���X�g���N�^��explicit�錾��lj�����ƁA�ϊ����s��ꂸ�A�R���p�C���G���[�ɂȂ�܂��B
class Counter { int count; public: explicit Count(int init) : count(init) {} };
�����I�ɃR���X�g���N�^���Ăяo�����A�L���X�g���w�肷��K�v������܂��B
Counter pageHit; : pageHit = Counter(14); pageHit = static_cast<Counter>(14);
�R�s�[�R���X�g���N�^���������P�ł����A�����explicit�錾����ƁA���̈����E�߂�l�ɒl�n�����g�p���邱�Ƃ��ł��Ȃ��Ȃ�܂��B