سلام!

این جلسه می خواهیم به طرز عمل کرد توابع سازنده (costructor) در کلاس های پایه و وارث بپردازیم.

به تابع سازنده ی کلاس Student در برنامه ی زیر دقّت کنید. در این تابع با کمک لیست مقداردهی تابع سازنده ی کلاس پایه (Adam) را صدا زدیم.

#include <string>

using namespace std;

class Adam{
    protected:
        string _name;
        int _age;
        double _height;
    public:
        
        Adam( string name = "", int age = 0, double height = 0 ) : _name(name), _age(age), _height(height) {}

        string name();
        int age();
        double height();

        void setName( string );
        void setAge( int );
        void setHeight( double );

};

string Adam::name(){
    return this->_name;
}

int Adam::age(){
    return this->_age;
}

double Adam::height(){
    return this->_height;
}

void Adam::setName( string name ){
    this->_name = name;
}

void Adam::setAge( int age ){
    this->_age = age;
}

void Adam::setHeight( double height ){
    this->_height = height;
}

class Student : public Adam{
    private:
        int _id;
    public:
        
        Student( string = "", int = 0, double = 0, int = 0 );

        int id();

        void setID( int );

};

Student::Student( string name, int age, double height, int id ) : Adam( name, age, height) , _id( id ){}

int Student::id(){
    return this->_id;
}

void Student::setID( int id ){
    this->_id = id;
}

int main(){
    Student std( "John Smith", 20, 180, 174 );
    return 0;
}

یک راه دیگر برای مقدار دهی عضوهای کلاس پایه را می توانید در کد زیر مشاهده کنید.

Student::Student( string name, int age, double height, int id ) : _id( id ){
this->setName( name );
this->setAge( age );
this->setHeight( height );
}

توجّه! شما نمی توانید به عضوهای کلاس پایه از طریق لیست مقداردهی، مقدار دهید. در واقع مثال زیر غلط است:

Student::Student( string name, int age, double height, int id ) : _name( name ), _age( age), _height( height ), _id( id ) {}

نمونه ی دیگر مقداردهی اشتباه:

Student::Student( string name, int age, double height, int id ) : _id( id ){
    Adam( name, age, height );
}

فعلا همین مقدار کافی است.

موفق باشید!