一 构造函数和析构函数的调用顺序
1 儿子不能继承父亲的构造和析构函数
2 执行顺序
class Base
{
public:
Base()
{ cout<<"基类的构造函数执行!"<<endl; }
~Base()
{ cout<<"基类的析构函数执行!"<<endl ;}
};
class DDD
{
public:
DDD()
{ cout<<"DDD类的构造函数"; }
~DDD()
{ cout<<"DDD类的析构函数"; }
};
class Son:public Base
{
private:
DDD d;
public:
Son()
{ cout<<"子类的构造函数 !" <<endl;}
~Son()
{ cout<<"子类的析构函数 !"<<endl; }
};
void main()
{
Son s;
}
(1) 创建父类的对象,构造函数的执行和子类没有关系。
(2)创建子类的对象,构造函数的执行顺序:
(i)首先执行父类的构造函数
(ii)再是对象所在类的构造函数
(iii)析构函数的执行顺序和构造函数相反
二 子类构造函数的格式:
1 如果父类中只有无参的构造函数,子类不需要调用父类的构造函数。
2 如果父类中有带参数的构造函数,子类必须要调用父类的构造函数,向父类传递参数。
class Person
{
protected:
char name[100];
int age;
public:
Person(char s[100],int sage)
{
strcpy(name,s);
age=sage;
}
void showp()
{ cout<<"姓名:"<<name<<" 年:"<<age<<endl;}
};
//Student: 成员变量name,age,g
class Student:public Person
{
protected:
int g;
public:
Student(char s1[100],int sage,int g):Person(s1,sage)
{
this->g=g;
}
void shows()
{
cout<<"姓名:"<<name<<" 年:"<<age
<<"成绩:"<<g<<endl;
}
};
void main()
{
Student s("孙璐",33,89);
s.shows();
}
3 传递参数的格式:
子类的构造函数:父类构造函数名(参数列表)
4 一般子类的构造函数带参数的个数=继承下来的成员变量+子类自己成员变量。
1 儿子不能继承父亲的构造和析构函数
2 执行顺序
class Base
{
public:
Base()
{ cout<<"基类的构造函数执行!"<<endl; }
~Base()
{ cout<<"基类的析构函数执行!"<<endl ;}
};
class DDD
{
public:
DDD()
{ cout<<"DDD类的构造函数"; }
~DDD()
{ cout<<"DDD类的析构函数"; }
};
class Son:public Base
{
private:
DDD d;
public:
Son()
{ cout<<"子类的构造函数 !" <<endl;}
~Son()
{ cout<<"子类的析构函数 !"<<endl; }
};
void main()
{
Son s;
}
(1) 创建父类的对象,构造函数的执行和子类没有关系。
(2)创建子类的对象,构造函数的执行顺序:
(i)首先执行父类的构造函数
(ii)再是对象所在类的构造函数
(iii)析构函数的执行顺序和构造函数相反
二 子类构造函数的格式:
1 如果父类中只有无参的构造函数,子类不需要调用父类的构造函数。
2 如果父类中有带参数的构造函数,子类必须要调用父类的构造函数,向父类传递参数。
class Person
{
protected:
char name[100];
int age;
public:
Person(char s[100],int sage)
{
strcpy(name,s);
age=sage;
}
void showp()
{ cout<<"姓名:"<<name<<" 年:"<<age<<endl;}
};
//Student: 成员变量name,age,g
class Student:public Person
{
protected:
int g;
public:
Student(char s1[100],int sage,int g):Person(s1,sage)
{
this->g=g;
}
void shows()
{
cout<<"姓名:"<<name<<" 年:"<<age
<<"成绩:"<<g<<endl;
}
};
void main()
{
Student s("孙璐",33,89);
s.shows();
}
3 传递参数的格式:
子类的构造函数:父类构造函数名(参数列表)
4 一般子类的构造函数带参数的个数=继承下来的成员变量+子类自己成员变量。