@Author:Runsen

面向对象编程旨在:在编程中实现继承、隐藏、多态等现实世界的实体。OOP 的主要目的是将数据和对它们进行操作的函数绑定在一起。

我们可以说C++中的类,代表一组共享一些共同属性和行为的对象。

class person
{char name[20];int id;
public:void getdetails(){}
};int main()
{person p1; // p1 is a object
}

构造函数

构造函数是特殊的类成员,每次实例化该类的对象时,编译器都会调用它们。构造函数与类同名,可以定义在类定义的内部或外部。

构造函数在以下方面与普通函数不同:

  • 构造函数与类本身同名
  • 构造函数没有返回类型
  • 创建对象时会自动调用构造函数。
  • 它必须放在class的公共部分。
  • 如果我们不指定构造函数,C++ 编译器会为对象生成一个默认构造函数(期望没有参数并且有一个空体)。

有3种类型的构造函数:

  • 默认构造函数
  • 参数化构造函数
  • 复制构造函数(这种比较少见)
#include <iostream>
using namespace std;
class Geeks
{
public:int id;//默认构造Geeks(){cout << "Default Constructor called" << endl;id = -1;}//参数化构造函数Geeks(int x){cout << "Parameterized Constructor called" << endl;id = x;}
};int main()
{// 默认构造Geeks obj1;cout << "Geek id is: " << obj1.id << endl;//  参数化构造函数Geeks obj2(21);cout << "Geek id is: " << obj2.id << endl;return 0;
}Default Constructor called
Geek id is: -1
Parameterized Constructor called
Geek id is: 21

复制构造函数是一个成员函数,它使用同一类的另一个对象来初始化一个对象。复制构造函数具有以下通用函数原型:

ClassName (const ClassName &old_obj);

以下是复制构造函数的简单示例。

#include <iostream>
using namespace std;class Point
{
private:int x, y;public:// 参数化构造函数Point(int x1, int y1){x = x1;y = y1;}// 复制构造函数Point(const Point &p1){x = p1.x;y = p1.y;}int getX() { return x; }int getY() { return y; }
};int main()
{Point p1(10, 15); // 参数化构造函数Point p2 = p1;    // 复制构造函数cout << "p1.x = " << p1.getX() << ", p1.y = " << p1.getY();cout << "\np2.x = " << p2.getX() << ", p2.y = " << p2.getY();return 0;
}p1.x = 10, p1.y = 15
p2.x = 10, p2.y = 15

析构函数

析构函数是另一个特殊的成员函数,当对象的作用域结束时由编译器调用。

#include <iostream>
using namespace std;
class Geeks
{public:int id;//析构函数~Geeks(){cout << "Destructor called for id: " << id <<endl;}
};int main(){Geeks obj1;obj1.id=7;int i = 0;while ( i < 5 ){Geeks obj2;obj2.id=i;i++;       } // obj2的范围到此结束return 0;} // obj1的范围到此结束Destructor called for id: 0
Destructor called for id: 1
Destructor called for id: 2
Destructor called for id: 3
Destructor called for id: 4
Destructor called for id: 7

面向对象编程中的三大封装、继承和多态

继承

继承:一个类从另一个类派生属性和特征的能力称为继承。继承是面向对象编程最重要的特性之一。

  • 子类:从另一个类继承属性的类称为子类或派生类。
  • 超类:其属性由子类继承的类称为基类或超类。
  • 可重用性:继承支持“可重用性”的概念,即当我们想要创建一个新类并且已经有一个包含我们想要的一些代码的类时,我们可以从现有类中派生出我们的新类。通过这样做,我们正在重用现有类的字段和方法。

封装

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,在类中定义的所有项目都是私有的。例如:

多态

多态:多态这个词意味着有多种形式。简单来说,我们可以将多态性定义为消息以多种形式显示的能力。

一个人同时可以有不同的特点。就像男人同时是父亲、丈夫、雇员。所以同一个人在不同的情况下会有不同的行为。这称为多态性。

【小白学习C++ 教程】十二、C++面向对象编程中的构造函数和析构函数相关推荐

  1. 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector

    @Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...

  2. python对象编程例子-python(十二)面向对象编程、类

    面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功 ...

  3. 【小白学习C++ 教程】十一、C++类中访问修饰符

    @Author:Runsen 类是面向对象编程.它是一种用户定义的数据类型,它拥有自己的数据成员和成员函数,可以通过创建该类的实例来访问和使用它们. 一个对象是一个类的实例.定义类时,不会分配内存,但 ...

  4. 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

    @Author:Runsen STL 中的栈容器是一种容器适配器.在栈容器中,元素在一端插入并在同一端删除. stack 为了实现堆栈容器,我们需要在我们的程序中包含头文件<stack>. ...

  5. 【小白学习C++ 教程】二十、C++ 中的auto关键字

    @Author: Runsen 在 C++ 11 之前,每种数据类型都需要在编译时显式声明,在运行时限制表达式的值,但在 C++ 新版本之后,包含了许多关键字,允许程序员将类型推导留给编译器本身. 有 ...

  6. 【小白学习tensorflow教程】二、TensorBoard可视化模型训练

    @Author:Runsen 本想在Torch和Keras更新TensorBoard,还是决定扔在了tensorflow. TensorBoard是用于可视化图形和其他工具以理解.调试和优化模型的界面 ...

  7. 【小白学习C++ 教程】二、C++基础语法、注释和变量

    @Author:Runsen 学习深度学习的时候,不会C++,真的很伤心,面试算法根本没有优势,于是还是花点时间恶补下C++. 文章目录 C ++ Hello world代码 省略命名空间 输出 执行 ...

  8. 【小白学习C++ 教程】二十三、如何安装和使用 C++ 标准库

    @Author:Runsen 在 C++ 中,我们有两种类型的库: 静态库 动态库 静态库 静态库是成为引用它的可执行文件的一部分的库.因此,当我们开发应用程序并引用其中的静态库时,静态库的内容在应用 ...

  9. 【小白学习keras教程】二、基于CIFAR-10数据集训练简单的MLP分类模型

    @Author:Runsen 分类任务的MLP 当目标(y)是离散的(分类的) 对于损失函数,使用交叉熵:对于评估指标,通常使用accuracy 数据集描述 CIFAR-10数据集包含10个类中的60 ...

最新文章

  1. 著名作者网站论文下载
  2. Java记录 -55- Set下的HashSet
  3. 蓝桥杯 - 翻硬币(贪心)
  4. java repaint 重画图形,学习笔记:WINDOWS的图形重绘基础
  5. P2661 信息传递 二分图的最小环
  6. 窄带物联网技术有望终结碎片化现状
  7. 【渝粤教育】国家开放大学2018年春季 0248-21T电工电子技术 参考试题
  8. 控制台输入聊天记录 输出到文件中保存 Day20
  9. gan网络损失函数_生成对抗网络的最新研究进展
  10. javascript 代码段整理
  11. 网络测速神器:SpeedTest深度指南
  12. AVI文件在opencore框架下的解析
  13. TSQL 实现IRR功能
  14. WordPress怎么关闭评论审核啊?
  15. 7款英文语法检查工具推荐
  16. Win7下硬盘安装Ubuntu12.04双系统
  17. 笔记本拆装步骤及注意事项
  18. 英伟达哭晕在厕所,4090Ti显卡被春晚“首发”
  19. MySQL定时任务(EVENT|事件)如何配置,必会技能!
  20. HBase初识之学生心得总结

热门文章

  1. win10 下用 vs code 编译调试代码的过程 (MinGW)
  2. linux中256错误,YUM安装遭遇: [Errno 256] No more mirrors to try
  3. 型人格 disc测试_1号,完美型人格如何选择专业和职业@九型人格测试
  4. c# html datatable,C# DataTable使用方法详解
  5. mysql常用的视图_MySQL视图
  6. vscode怎么写qt项目_使用VSCode 编译调试QT程序
  7. python 指定证书验证_如何在python中验证SSL证书?
  8. SpringBoot入门教程(十五)集成Druid
  9. LINQ-from多from
  10. Timus题目中测试数据数量的计算