C++知识点(四)类与对象,结构体、联合体、枚举类

对象:属性和行为;将同一类属性和行为抽象为类

1.面向对象的基本特点:

  • 抽象:将同一类对象的共同属性和行为进行概括,形成类
  • 封装:
    • 将抽象出的数据、代码封装到一起,视为一个整体
    • 增加安全性和简化编程
  • 多态:同一名称、不同功能实现方式,减少标识符个数
  • 继承:在已有类的基础上进行扩展,形成新的类,有利于代码重用

2.内联成员函数:类中声明定义,类外定义inline

3.构造函数:

  • 用于对类的对象初始化,在对象创建时自动调用

    •   没有return语句
    •   可以有形参,可以无形参
    •   可以是内联函数
    •   可以重载
    •   可以带默认参数
  • 默认构造函数:
    •   没有自定义时,编译器在编译时会生成一个隐含的构造函数
    •   若已定义构造函数,但仍希望生成默认构造函数,使用“=default”

4.委托构造函数

  • 使用情况:形参不同
  • 使用类的其他构造函数来执行初始化过程

5.复制构造函数

  • 使用情况:对象的赋值,对象形参实参、返回值的传递
  • 默认复制构造函数,未自定义时:编译器自动生成,一一对应赋值
  • 自定义时,
    • 格式为类名::类名(const 类名 &对象名),const保证原对象不被修改,参数为对象的引用
    • 含有指针时,需要深拷贝,要自定义复制构造函数
  • 不希望函数被复制构造:
    •   声明为private
    •   "类名(const 类名 &对象名)=delete"

6.析构函数

  • 对象生存期消亡时,自动调用析构函数,释放资源
  • 默认析构函数:~类名();
  • 自定义析构函数

7.类的组合

  • 组合类:类中成员是已有类的对象
  • 组合类的构造函数:1)初始化本类数据成员 2)初始化对象成员(其构造函数会自动调用,但需要传递初始参数)
  • 类名::类名(对象成员的所需形参,本类成员所需形参):对象1(参数1),对象2(参数2)...{}
  • 最好构造函数要写一个默认构造函数,避免发生组合类无法构造情况

8.前向引用声明

  • 两个类相互引用时,两个声明的次序改如何决定?即用到前向引用声明
  • 前向引用声明只为程序引入一个标准符,具体声明在其他地方,class B;
  • 不能涉及到具体细节,包括对象

9.UML语言

  • 事物、关系、图

10.结构体struct

  • 默认访问属性:public
  • 使用情况:保存数据,而没什么操作
  • 特殊的类

11.联合体union

  • 使用情况:存储空间的公用,任意两个成员不会同时有效

12.枚举类enum class

  • 使用情况:作用域限制在枚举类中,使用时枚举类名::枚举值名
  • 语法:enum class 枚举类型名:底层类型{枚举值列表}

原文地址:https://www.cnblogs.com/lemon333333/p/10235902.html

时间: 2024-11-09 21:22:47

C++知识点(四)类与对象,结构体、联合体、枚举类的相关文章

第4章 类与对象 结构体与联合体

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10241560.html

C++中的空类与空结构体大小

今天面试遇到了一个很有意思的问题,即空结构体在C++中所占的内存大小是多少?参见如下代码: #include <iostream> struct S0 { }; int main() { std::cout << sizeof S0 << std::endl; return 0; } 面试官当场提醒了我一下,说如果S0对象所占用的内存大小为0,那么将可以申请无限多个此类型的对象数组,并且大小永远为0.我当时觉得有点道理,不过转念一想,还是有点疑惑. 回来研究了一下,原来

【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

递归汉诺塔 双层递归 #include <iostream> void han(int n, char A, char B, char C) { static int num = 1; std::cout << "第" << num << "次"; num++; if (n<1) { return; } else { han(n - 1, A, C, B); std::cout << A <&l

Swift 的类、结构体、枚举等的构造过程Initialization(上)

构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务. 构造过程是通过定义构造器(Initializers)来实现的,这些构造器可以看做是用来创建特定类型实例的特殊方法.与 Objective-C 中的构造器不同,Swift 的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化. 类实例也可以通过定义析构器(deinitializer)在类实例释放之前执行特定的清除工作.想了解更多关于

【程序设计】C与C++中空结构体与空类的大小

今天碰到了一道笔试题,问的是C++空类的大小是什么,用程序测试了一下. #include <iostream> using namespace std; class ClassA { }; // struct StructA { // // }; int main() { cout << "ClassA " << sizeof(ClassA) << endl; } 输出结果是1: 扩展开来,对于一个空类跟空结构体在C与C++中所占的空间是

C#语言基础——结构体和枚举类型

结构体和枚举类型 一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明含有成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,

黑马程序员——c语言基础:结构体和枚举---typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.什么是结构体 当一个整体由多个数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高等数据构成,这些数 据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型. 为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它

Swift的结构体,枚举,可选Optional,可选链

//: Playground - noun: a place where people can play import Cocoa var str0 = "Hello, playground" //类是引用类型,结构体与枚举是值类型 //*****************结构体*************** struct Point { var x = 0 var y = 1 //结构体的的方法 //为了能够在实例方法中修改属性值,可以在方法定义前添加关键字mutating mutat

黑马程序员学习笔记--------C语言变量类型,结构体,枚举

本章学习的知识是定义结构体,枚举等自定义的数据类型,已经宏命令,变量类型等细小的知识点,在开始本章的新知识学习之前首先我们要明白的是C语言有丰富的数据类型和运算符,因此计算能力非常强大,计算过程中使用的值一般用变量来存储.变量也是有分类型的,不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域,C语言也提供了一些关键字来设置变量的属性(比如设置存储类型.生命周期). 一.变量类型 变量分为全局变量和局部变量. 首先说明一下局部变量的特点 1> 定义:在函数内部定义的变量,称为局部变量.形

黑马程序员— C语言基础之结构体、枚举、预处理、typedef的使用

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本章我们主要来学习之前所学的复杂数据类型中的同样也很重要的结构体和枚举的知识,以及C语言中的预处理,typedef的使用,简单介绍一下static和extern等一些比较杂的知识.在开始本章的新知识学习之前首先我们来学习一下根据变量的作用域的不同C语言一般把变量分为两种,局部变量和全局变量.下面我们来分别比较和体会一下这两种不同的变量类型: 根据变量的作用域,可以分为: 1. 局部变量: a.