深圳市建设局官方网站,建设维护网站 未签订合同,北京住房及城乡建设部网站,天津建设工程信息网评标专家怎么查询评审项目这是关于一个普通双非本科大一学生的C的学习记录贴
在此前#xff0c;我学了一点点C语言还有简单的数据结构#xff0c;如果有小伙伴想和我一起学习的#xff0c;可以私信我交流分享学习资料
那么开启正题
今天分享的是关于继承的知识点
1.派生类的默认成员函数
首先我…这是关于一个普通双非本科大一学生的C的学习记录贴
在此前我学了一点点C语言还有简单的数据结构如果有小伙伴想和我一起学习的可以私信我交流分享学习资料
那么开启正题
今天分享的是关于继承的知识点
1.派生类的默认成员函数
首先我们来回顾以下默认成员函数是哪几个
1.构造函数 完成初始化工作
2.析构函数 完成清理工作
3.拷贝构造函数 使用同类对象初始化创建新对象
4.赋值重载函数 把一个对象赋值给另一个对象
5.取地址重载函数 普通对象取地址
6.const取地址重载函数 const对象取地址
那么对于派生类我们的默认成员函数是怎样的呢
1.派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员如果基类没有默认的构造函数则必须在派生类构造函数的初始化列表阶段显示调用
2.派生类的拷贝构造函数必须调用基类拷贝构造函数完成基类的拷贝初始化
3.派生类的operator必须要调用基类的operator完成基类的复制
4.派生类的析构函数会在被调用完后自动调用基类的析构函数清理基类成员因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序
5.派生类对象初始化先调用基类构造再调派生类构造符合栈的先进后出
6.派生类对象析构清理先调用派生路析构再调基类析构符合栈的先进后出
7.因为后续一些场景析构函数需要构成重写重写的条件之一是函数名相同(这个我们后面会讲 解)。那么编译器会对析构函数名进行特殊处理处理成destrutor()所以父类析构函数不加 virtual的情况下子类析构函数和父类析构函数构成隐藏关系多态内容
class Person
{
public:Person(const char* name peter): _name(name){cout Person() endl;}Person(const Person p): _name(p._name){cout Person(const Person p) endl;}Person operator(const Person p){cout Person operator(const Person p) endl;if (this ! p)_name p._name;return *this;}~Person(){cout ~Person() endl;}
protected:string _name; // 姓名
};class Student : public Person
{
public:Student(const char* name, int num): Person(name), _num(num){cout Student() endl;}Student(const Student s): Person(s), _num(s._num){cout Student(const Student s) endl;}Student operator (const Student s){cout Student operator (const Student s) endl;if (this ! s){Person::operator (s);_num s._num;}return *this;}~Student(){cout ~Student() endl;}
protected:int _num; //学号
};void Test()
{Student s1(jack, 18);Student s2(s1);Student s3(rose, 17);s1 s3;
}
2.继承与友元
友元关系不能继承也就是说基类友元不能访问派生类私有和保护成员
很简单理解这里不贴代码了
3.继承与静态成员
基类定义了static静态成员则整个继承体系里面只有一个这样的成员无论拍成出多少个子类都只有一个static成员
class Person
{
public:static int _count;
};int Person::_count 0;class Student : public Person
{
public:int _id;
};void Test()
{Student s1;Student s2;Student s3;cout Person::_count endl;s1._count 1;cout Person::_count endl;s2._count 2;cout Person::_count endl;s3._count 3;cout Person::_count endl;
}
新手写博客有不对的位置希望大佬们能够指出也谢谢大家能看到这里让我们一起学习进步吧