4.C++面向对象1(类的定义,实例化,三大特性-封装)

⭐本篇文章为C++学习第4篇,主要了解类和对象基础

⭐本人C++代码的Gitte仓库:yzc的c++学习: 小川c++的学习记录 - Gitee.com            、       

⭐我们知道面向对象有三大特性:封装,继承,多态,我们以类为基础进行讲解

目录

一. 类的引入与定义

1.1 类的引入

1.2 类的定义和声明

二. 类的访问限定符及封装⭐

三. 类的作用域和实例化

 四. 几个常见易错分析⭐

4.1 C++中类和struct的区别是什么?

4.2 函数,结构体等的声明与定义区别是什么?

4.3 C++面向对象三大特性是什么?C++是如何实现封装的??


一. 类的引入与定义

1.1 类的引入

1. C语言中,我们可以在结构体中定义变量,不能定义函数

2. C++中,我们可以在结构体中定义变量和函数

#include<iostream>
using namespace std;struct Node_c
{int val;struct Node_c* next;
};struct Node_cpp
{int val;Node_cpp* next;//c++可以在类中定义函数Node_cpp CreatNode(){}
};int main()
{return 0;
}

上面结构体的定义,在c++中,我们更喜欢使用class来定义

class Node_cpp
{int val;Node_cpp* next;//c++可以在类中定义函数Node_cpp CreatNode(){}
};

1.2 类的定义和声明

class className
{// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

其中,class为关键字,用于定义类。classname是该类的名字,{}中的是类的主体

类中可以定义两种成员:1. 成员变量        2. 成员函数

类的定义和声明有两种方式:

1. 类成员的声明和变量都放在类体内部。

注意:编译器默认类内部声明定义的函数是内联函数

举例:

//在类内部声明和定义
class person
{int age;string name;string ID;void ShowInfo(){cout << "age:" << age << "name:" << name << "ID:" << ID;}
};

2. 类的声明放在.h文件中,类的定于放在.cpp文件中。

注意:在.cpp文件中定义类的时候要在成员函数前加上 类名::

.h文件

#pragma once//类声明
class person
{int age;string name;string ID;void ShowInfo();
};

.cpp文件

#include<iostream>
#include"blog.h"
using namespace std;//类函数的定义
void person::ShowInfo()
{cout << "age:" << age << "name:" << name << "ID:" << ID;
}int main()
{return 0;
}

我们在日常学习的时候建议使用第一种,比较方便。

在工程中建议使用第二种,更规范。

二. 类的访问限定符及封装⭐

我们知道C++面向对象三大特性中的一个:封装

C++实现封装的方式:用类将对象的属性和方法结合在一块,完善对象,再使用访问权限选择性将接口提供给外部用户使用

 访问限定符有三种:

public(公有)        private(私有)        protected(保护)

说明:

1. public修饰的成员外部可以直接访问

2. private和protected修饰的成员外部无法直接访问(这两种限定符类似)

3. 访问权限从一个限定符开始,到另一个限定符为止

4. 如果后面没有访问限定符,作用域到}即类结束

5. class默认访问权限是private,struct默认访问权限就是public

6. 一般情况下,成员变量都是比较隐私的,都会用私有或者保护修饰

举例:

//访问限定符
class Student
{
public:
//公有区域void ShowInfo(){cout << _name << endl;cout << _age << endl;cout << _id << endl;}int _GetAge(){return _age;}
//公有区域
private:
//私有区域char* _name;int _age;int _id;
//私有区域
};

三. 类的作用域和实例化

3.1 类的作用域

 类定义了新作用域:类中所有成员都在类的作用域中,如果在类外定义类成员需要使用

类名+:: 进行定义

 3.2 类的实例化

类是用于描述的对象的,我们定义的类没有分配实际的内存空间(只是一段代码)。

当使用类创建对象的时候,才会占用实际物理空间,存储成员变量

且一个类可以实例化多个对象

int a;
Student st;

可以类比int和Student类,a是整形变量,st是学生变量

只有a和st占用物理空间,int和Student不会占用

举例:

#include<iostream>
using namespace std;//访问限定符
class Student
{
public:void ShowInfo(){cout << "name:" << _name << " " << " age:" << _age << " id:" << _id << endl;}const char* _name;int _age;int _id;
};int main()
{Student st1;    //实例化一个对象st1st1._age = 18;st1._name = "张三";st1._id = 1;st1.ShowInfo();return 0;
}

运行结果:

 

 四. 几个常见易错分析⭐

4.1 C++中类和struct的区别是什么?

C++兼容C语言,所以在C++中可以使用struct去定义结构体使用,C++也能使用struct去定义类

C++使用struct定义类和class定义的类基本一致,唯一区别是struct定义类,成员默认是公有的。使用class定义类,成员默认是私有的

4.2 函数,结构体等的声明与定义区别是什么?

声明是一种承诺,表示程序中有该函数,结构体。我们可以通过声明的名字快速了解该函数,结构体等的作用

定义是给出函数,结构体等如何实现这个功能或者内容。我们可以通过定义了解函数,结构体的具体内容

4.3 C++面向对象三大特性是什么?C++是如何实现封装的??

封装,继承,多态

封装:将数据和对数据的操作的方法进行结合,隐藏对象的属性和细节,用户仅通过对外公开的接口和对象交互。方便用户的同时也保护数据

C++实现封装,可以通过类将数据和对数据操作的方法进行结合,通过private,public等访问权限来隐藏内部实现细节,控制哪些方法供外部使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143696.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

linux hadoop-3.3.6 hbase-2.5.7

软件下载 hadoop https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz 可以直接下载到本地&#xff0c;也可以直接下载进虚拟机中 如果速度较慢&#xff0c;可以用&#xff1b;另一个 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common…

模电模块(一)

这个看起来功能挺全的&#xff0c;就是小贵&#xff0c;有时间自己做一个&#xff1a; 首页-康威科技-淘宝网 (taobao.com) 画一个集成板&#xff0c;集合上述模块的功能。

kubernetes架构

kubernetes cluster由master和node组成&#xff0c;节点上运行着若干kubernetes服务Master节点&#xff1a; master是kubernetes cluster的大脑&#xff0c;运行着的Daemon服务包括kube-apiserver&#xff0c;kube-scheduler,kube-controller-manager&#xff0c;etcd和Pod网络…

VBS学习1 - 语法、内置函数、内置对象

文章目录 概述执行脚本语法转义字符文本弹框msgbx定义变量dim&#xff08;普通类型&#xff09;定义接收对象set字符拼接&用户自定义输入框inputbox以及输入判断ifelse数组&#xff08;参数表最大索引&#xff0c;非数组容量&#xff09;有容量无元素基于元素确定容量 循环…

tidb 集群搭建

官网的搭建文档&#xff1a;使用 TiUP 部署 TiDB 集群 | TiDB 文档中心 我本地使用三台 centos7.9 服务器搭建&#xff0c;要保证三台服务器之间是可以互相通信的&#xff1b; 搭建集群的命令在其中一台服务器上执行即可&#xff1b; 1、安装tiup&#xff1a; curl --proto …

【接口测试】Postman--变量与集合

一、变量 ​ 变量这个概念相信大家都不陌生&#xff0c;因此在这里我们不介绍了。主要说一下在Postman中有哪几类变量&#xff0c;主要包括以下四类&#xff1a; Global&#xff08;全局&#xff09; Environment&#xff08;环境&#xff09; Local&#xff08;本地&#xf…

[深度学习]Pytorch框架

1 深度学习简介 应用领域&#xff1a;语音交互、文本处理、计算机视觉、深度学习、人机交互、知识图谱、分析处理、问题求解 2 发展历史 1956年人工智能元年2016年国内开始关注深度学习2017年出现Transformer框架2018年Bert和GPT出现2022年&#xff0c;chatGPT出现&#xff0…

SHL笔试测评系统题库考什么?如何通过综合测评|附性格测试104道

嘿&#xff0c;各位求职小伙伴们&#xff01;我是职小豚&#xff0c;今天就来带大家深入了解神秘又充满挑战的 SHL 笔试测评系统。 一、SHL 人才测评系统介绍 SHL 呀&#xff0c;那可是人才测评领域的超级大明星&#xff01;就像一个智慧的魔法师&#xff0c;用各种神奇的题目…

ICP算法介绍,机器人姿态估计,三维点云配准

介绍 ICP算法&#xff0c;即Iterative Closest Point&#xff08;迭代最近点&#xff09;算法&#xff0c;是一种广泛应用于计算机视觉和图像处理领域的几何配准算法。它的主要目的是通过最小化两组点集之间的距离来找出一组变换&#xff0c;使得两组点集尽可能地对齐。ICP算法…

CDN方式的vant组件不能用,是因为标签要补成双标签

cdn方式的标签需要时双标签&#xff0c;单标签不能用 <van-fieldreadonlyclickable:value"formdata.yuyue_changguan"label"预约场馆"placeholder"点击选择预约场馆"click"showPicker true"></van-field><van-popup v…

spring springboot 日志框架

一、常见的日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 注意&#xff1a;SLF4j 类似于接口 Log4j &#xff0c;Logback 都是出自同一作者之手 JUL 为apache 公司产品 Spring&#xff08;commons-logging&#xff09;、Hibernate&#xff08;jboss…

配置环境-keil

配置keil -- 先将keil安装配置好&#xff0c;包括库 一、STM32 -- STM32是意法半导体&#xff08;意大利&#xff09;采用ARM公司设计的内核&#xff0c;设计一系列32位单片机芯片。 1、STM32开发的几种方式 2、STM32寄存器和库函数版本的工程创建 新建文件夹 复制相关文件…

Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法

我的问题是在一次系统更新后&#xff0c;导致虚拟机无法使用的。我的虚拟机只有方法三解决了问题。 一、方法一 以管理员身份打开cmd&#xff0c;依次执行以下命令&#xff1a; net start vmci net start vmx86 net start VMnetuserif二、方法二 按 WinR 键&#xff0c;运行…

文件上传-php

查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…

macOS平台TensorFlow环境安装

1.安装xtarfile pip3 install xtarfile 2.安装 pip3 install matplotlib 3.安装jieba pip3 install jieba 4.安装 pip3 install tensorflow tensorflow安装成功

多目标优化算法(Multi-Objective Optimization Algorithms, MOOA)介绍

在现实世界中&#xff0c;许多问题都涉及到多个目标的权衡和优化。例如&#xff0c;在工程设计中&#xff0c;可能需要同时考虑成本、效率和可靠性&#xff1b;在资源管理中&#xff0c;可能需要平衡环境保护和经济效益。多目标优化算法&#xff08;Multi-Objective Optimizati…

JavaEE:网络编程(套接字)

文章目录 Socket套接字TCP和UDP的区别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP api的使用UDPDatagramSocketDatagramPacketInetSocketAddress练习 TCPServerSocketSocket练习 Socket套接字 Socket是计算机网络中的一种通信机制&#xff0…

内卷、同质化严重,储能的创新在哪里?一文盘点行业最新技术方向。

一、市场现状介绍 1、储能企业的三大挑战 价格战愈演愈烈&#xff1a;今年以来&#xff0c;储能系统价格一路走低&#xff0c;从年初的0.8元/Wh降至如今的0.5元/Wh&#xff0c;降幅超过30%。这样的价格战让不少企业倍感压力。 产品同质化严重&#xff1a;纵观2024年上半年的…

C#学习(四)C#连接Mysql实现增删改查

博主刚开始接触C#&#xff0c;本系列为学习记录&#xff0c;如有错误欢迎各位大佬指正&#xff01;期待互相交流&#xff01; 文章目录 一、安装Mysql1.1 启用Mysql1.2 登录Mysql 二、安装Navicat2.1 建立连接2.2 新建数据库2.3 新建表 三、创建Winform实现增、删、改、查3.1 下…

QT<24> Qt和windows中获取CPU序列号号以及主板序列号

前言&#xff1a;在qt中获取CPU和主板唯一序列号&#xff0c;可以在程序构造函数中判断是否与windows中一致&#xff0c;不一致可以直接退出程序&#xff0c;防止程序daoyong。 一、获取电脑CPU唯一序列号 QString MainPage::get_cpu() {QString cmd"wmic cpu get proc…