C++的封装,继承和多态

具有相同特性的对象,抽象成类。

封装:把定义的数据和操作数据的函数进行整合,然后隐藏属性和实现细节,对外提供接口,控制

继承: 共有继承:子类可以访问父类的 pubilic和protected成员,保持原有的状态
私有继承:子类可以访问父类的 pubilic和protected成员,并且将pubilic和protected成员作为自己的private成员,该子类可以访问,但是该子类的子类无法访问(因为其父类相关成员变成了私有成员)
保护继承:子类可以访问父类的 pubilic和protected成员,并且将pubilic和protected成员作为自己的protected成员,只能被它的派生类成员函数或友元访问

多态: 重载: 同一个作用域(同一个类)函数名相同,但是参数类型或者个数不同,返回值不同
重写: 不同作用域内(父类和子类),函数名相同,参数个数类型和返回值相同
重定义:不同作用域内,不构成重写,都称之为重定义 (我的理解就是不同作用域的重载)

继承中的构造和析构函数,先有基类的构造再有子类的构造,然后析构函数与构造函数的顺序相反

构造函数:1.在没有定义构造函数时,系统会自动生成一个空的构造函数。
2.构造函数与类名相同
3.可以被重载

析构函数:1.在类名前加~
2.有且只有一个
3.对象注销时自动调用析构函数,先构造的对象后析构

父类和子类同名的成员变量
访问: 子类直接访问
访问父类需要加父类的作用域:: 例如(son.func())

父类和子类同名的成员函数
访问: 子类直接访问
访问父类需要加父类的作用域:: 例如(son.father::func())

当子类与父类拥有同名的成员函数,子类会隐藏父类中同名的成员函数,加作用于可以访问到父类中同名函数

多重继承需要加作用域,菱形继承导致数据有两份,导致数据浪费,利用虚继承可以解决菱形继承 virtual

纯虚函数 关键字virtual
纯虚函数和虚函数的区别在于 有没有“=0”,一个实现了函数,一个未实现
类中有一个纯虚函数就是抽象类
特点:
1.不允许使用实例化对象(创建对象)
2.抽象类的子类必须要重写父类中的纯虚函数,否则也是抽象类
父类的指针指向子类对象

虚析构和纯虚析构
虚:virtual ~类名() 作用:父类的指针在析构的时候不会调用子类中析构函数,出现内存泄漏情况,所以在父类中加入虚析构可以解决
纯虚:virtual ~类名() =0
类名:~类名(){} 需要有声明也需要有具体实现

模板:template
声明一个模板,告诉编译器后面代码中紧跟着T不要报错,T是一个通用数据类型

普通函数和函数模板区别:
1.普通函数会发生隐式类型转换
2.函数模板不会发生隐式类型转换
3.函数模板显示指定类型发生隐式类型转换,例如指定为int 函数名();

封装继承多态是面向对象编程中的三大特性,C++也支持这三种特性。 1. 封装 封装是指将数据和对数据的操作封装在一起,形成一个类。类中的数据和方法可以设置为私有的,只有类内部可以访问,外部无法访问。这样可以保证数据的安全性和完整性。 下面是一个封装的例子: ```c++ class Person { private: string name; int age; public: void setName(string n) { name = n; } void setAge(int a) { age = a; } string getName() { return name; } int getAge() { return age; } }; ``` 2. 继承 继承是指一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。子类可以使用父类的属性和方法,也可以重写父类的方法。 下面是一个继承的例子: ```c++ class Student : public Person { private: int id; public: void setId(int i) { id = i; } int getId() { return id; } }; ``` 3. 多态 多态是指同一种类型的对象,在不同的情况下可以有不同的表现形式。C++中实现多态有两种方式:虚函数和模板。 下面是一个虚函数的例子: ```c++ class Shape { public: virtual double getArea() { return 0; } }; class Circle : public Shape { private: double radius; public: Circle(double r) { radius = r; } double getArea() { return 3.14 * radius * radius; } }; class Rectangle : public Shape { private: double width; double height; public: Rectangle(double w, double h) { width = w; height = h; } double getArea() { return width * height; } }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值