IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++特性 :封装 、继承、多态 -> 正文阅读

[C++知识库]C++特性 :封装 、继承、多态

一、类和数据抽象

面向对象的思想就是将任何事物看作对象,对象有自己的属性和行为,收集这些属性就是数据抽象的任务。

一个空类中包括什么:

class empty
{
public:
    empty();  // 无参构造函数
    empty(const empty &rh); // 拷贝构造函数
    ~empty(); // 析构函数
    empty & operator=(const empty &rg); // 赋值操作符函数
};


empty e1;       // e1:“我很空虚!”      无参构造函数
empty e2(e1); // e2:“我跟你一样空虚!”   拷贝构造函数
empty e3 = e1; // e3:“我也是!我也是!”  赋值操作符
  1. 用类实现数据的抽象

    public:成员可以被类外访问。

    private:成员只能在类内访问。

    protected:可以被类内和该类的子类访问。

  2. 构造函数:与类同名的函数,作用:在对象生成的时候,初始化成员数据。

  3. 析构函数:~ 作用:在对象结束时清理对象的成员数据,释放动态内存分配。

const对象和const成员函数

//const 修饰变量。声明变量为只读,保护变量以防更改。必须初始化。
const int i = 5;
i = 10;//错误
//const 修饰数组 
const int a[9] = {1,2,3 ,4 5,5,9};
//const 修饰指针  1、限定指向空间的值不能更改 2、限定指针不能更改
int i = 5;
int j = 6;
int k = 7;
const int *p = &i; //定义1


作用:声明常量型的变量,修改const类型的数据将引起编译错误。

  1. friend对象和friend类

    friend 友元。类的friend函数可以访问类的private成员。定义的友元函数需要在类的定义中说明。

    友元函数引用的参数就是类的地址,通过类的地址就可以访问类内的成员。

    friend  void good(Buddy *b);
    good(&b);
        
    friend  void good(Buddy &b);
    good(b);
    
    friend class class2;//类作为友元,可以访问class1中的成员。
    
  2. this 指针

    类定义中指向自己的指针,this指针只有在成员函数中才有定义。this指针不能在静态函数中使用

  3. 动态内存分配 (堆)

    C 语言:malloc() 首先申请一片连续的内存空间,返回指向这片内存空间的指针,需要判断函数返回值是否为NULL。

    malloc分配的内存大小至少为size参数所指定的字节数。

    int *p = malloc(sizeof(int));
    if(P!= NULL){
        
    }
    free(p);
    

    C++:new

    new关键字进行动态内存申请,delete关键字进行内存释放。动态内存由内存====中分配。

    类型名 * 指针 = new 类型名;
    
    int * p = new int(size);
    delete p;
    
    int * foo;
    foo = new int [5];  //返回指向序列的第一个元素的指针,初始化数组大小为1。
    foo = new int (1);  // 动态分配一个int,初始化为1.
    
    //new关键字初始化
    int* pi = new int(1);
    float* pf = new float(2.0f);
    char* pc = new char('c');
    

New和malloc的区别

new关键字是c++的一部分malloc是c标准库提供的函数
new以具体类型为单位进行内存分配malloc以字节为单位进行内存分配
new在申请单个类型变量时可以进行初始化malloc不具备内存初始化的特性
new返回有类型的指针malloc返回无类型的指针

二、C++特性 :封装 、继承、多态

封装:实现代码的模块化

封装类的访问类型:public private protected(成员只能被该类的成员函数或派生类的成员函数访问)

继承:实现代码扩展

多态:虚函数,函数重载

通过基类的对象指针或引用访问虚函数

函数重载和函数重写的区别:

函数重载:
//发生在同一个类中,函数名相同,参数列表不一样
函数重写:
//函数重写必须有继承关系
//函数重写的需求:父类的功能无法满足子类的需求
//重写的函数和被重写的函数,函数名和函数参数必须完全一致
//重写的函数和被重写的函数,返回值相同
  1. 继承

    利用一个类生成另一个类的对象。子类获得父类所有成员,此外还有自己的成员。

    class father{
    
    };
    class son :public father {
    
    };
    
  2. 虚拟函数和多态性

    虚拟函数: 在父类中定义但不实现,在子类中进行实现。虚拟函数必须加上virtual,通过父类的指针调用实际子类的成员函数。

    ? 主要是为了实现一个接口,规范继承。 (通过基类访问派生类定义的函数)

    **纯虚函数:**virtual void funtion1()=0。函数原型等于0,

虚函数和纯虚函数的区别:

虚函数纯虚函数
虚函数必须实现只有声明,没有定义
虚函数只能借助于指针或者引用来达到多态的效果派生类仅仅只是继承函数的接口
虚函数可以直接使用在子类中实现该函数才可以使用。

当基类指针指向一个子类对象,通过这个指针调用子类和基类同名成员函数的时候,基类声明为虚函数「子类不写也可以」就会调子类的这个函数,不声明就会调用基类的。

多态 :通过虚拟函数进行实现,即通过同一个父类的虚拟函数,子类实现不同的功能。

多态体现为父类引用变量可以指向子类对象

多态的实现依赖于继承,先声明一个父类的实例,分别赋予不同的子类实例。

多态是同一个行为具有多个不同表现形式或形态的能力。

  1. 模板

利用模板,不仅可以指定全部相关的函数重载。还可以指定全部的类

//继承
#include <iostream>
#include <string>
using namespace std;
class  Father {
public:
	void set_value(int a, int b) {
		height = a;
		width = b;
	}
protected:
	int height;
	int width;
};
class Son : public Father {
public:
	int area() {
		return height * width;
	}
};
int main() {
	Son s1;
	Father F;
	s1.set_value(4,5);
	cout<<s1.area();
	return 0;
}
//虚函数 多态
#include <iostream>
#include <string>
using namespace std;

class  Father {
public:
	 void set_value(int a, int b) {
		height = a;
		width = b;
	}
	 virtual int area() {
		return height * width / 2;
	}
protected:
	int height;
	int width;
};

class Son : public Father {
public:
	 int area() {
		return height * width;
	}
};
class Son1 : public Father {
public:
	int area() {
		return height * width;
	}
};

int main() {
	Son1 s1;
	Father *F = new Son1;
	F->set_value(4,5);
	cout<<F->area();
	return 0;

}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:26:28  更:2021-07-31 16:28:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 16:51:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码