发布时间:2023-10-10 10:30
封装,继承和派生,多态性
封装:
封装是面向对象程序设计最基本的特性,把数据(属性)和函数(方法,操作)合成一个整体,这在计算机世界中是用类与对象实现的。
继承和派生:(继承和派生一体两面)
继承机制:是类型层次结构设计中实现代码的复用重要手段。
派生:保持原有类特性的基础上进行扩展,增加新属性和新方法,从而产生新的类型。
在面向对象程序设计中,继承和派生是构造出新类型的过程。呈现类型设计的层次结构,体现了程序设计人员对现实世界由简单到复杂的认识过程。
层次概念是计算机的重要概念:
C++通过类派生的机制来支持继承。被继承的类称为基类或超类,新产生的类为派生类或子类。基类和派生类的集合称作类继承层次结构。
由基类派生出,派生类的设计形式为:
#include
#include
#include
#include
#include
using namespace std;
class Person
{
private:
char _idPerson[20];
char _name[8];
int _age;
public:
Person()
{
_idPerson[0] = '0';
_name[0] = '0';
_age = 1;
}
Person(const char* id, const char* name, int age)
{
strcpy_s(_idPerson, 20, id);
strcpy_s(_name, name);
_age = age;
}
~ Person(){}
void Dance() const
{
cout << "跳舞" << endl;
}
void PrintPersonInfo() const
{
cout << "身份证号:" << _idPerson << 't';
cout << "姓名:" << _name << 't';
cout << "年龄:" << _age << endl;
}
};
//派生类 访问限定符 基类
class Student : public Person
{
private:
char _snum[10];
float _score;
public:
void Study() const
{
cout << "学习!" << endl;
}
Student() :Person()
{
_snum[0] = '0';
_score = 0.0;
}
Student(const char* id, const char* name, int age, const char* num)
:Person(id,name,age)
{
strcpy_s(_snum, 10, num);
_score = 0.0;
}
~Student() {}
void PrintStudentInfo() const
{
cout << "学号:" << _snum << "t" << "成绩:" << _score << endl;
}
};
int main()
{
Student studx("61232818820298", "zyy333", 26, "210110111");
return 0;
}
**总结:**派生反映了事物之间的联系,事物个性与共性之间的关系。派生与独立设计若干相关的类,前者 工作量少,重复重复的部分可以从基类继承来,不需要单独编程。继承是类型设计层面上的复用。
注意:
1. 构造函数和析构函数不能被继承。我们知道构造函数和析构函数是跟对象的创建与消亡的善后工作相关。我们所创建派生类的对象,虽然和基类的对象有相同之处,但是仍然是不同的对象。所以,适用于基类的构造函数和析构函数不可能完全满足派生类对象的创建和消亡的善后工作。因此,构造函数和析构函数不被继承。
2. 其他函数都可以通过类对象来调用,创建对象时由系统调用该对象所属类的构造函数,在该对象生存期中也只调用这一次。由继承而来的派生类对象,是能够调用父类的函数,但不能调用构造函数也不能调用析构函数。
3. 继承方式,亦称为访问控制,是对基类成员进一步限制。继承方式有三种:公有,保护和私有。
总结