سلام!
این جلسه می خواهیم به طرز عمل کرد توابع سازنده (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 );
}
فعلا همین مقدار کافی است.
موفق باشید!