C++ 类与对象的使用要点(超详细解析,小白必看系列)

news2024/10/5 12:51:58

1.面向过程和面向对象初步认识

C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题

例如:洗衣服

C++是基于对象的,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成

对象:人,洗衣液,衣服,洗衣机

整个过程:人,衣服,洗衣机,洗衣粉四个对象交互完成,人是不需要关心洗衣机如何洗衣服的,是如何甩干的

2.类的引入

C 语言结构体中只能定义变量,在 C++ 中,结构体内不仅可以定义变量,也可以定义函数。 比如:
之前在数据结构初阶中,用 C 语言方式实现的栈,结构体中只能定义变量 ;现在以 C++ 方式实现,
会发现 struct 中也可以定义函数
#define _CRT_SECURE_NO_WARNINGS

//#include<stdio.h>
#include<iostream>
using namespace std;
typedef int DataType;

struct Stack
{
	void Init(size_t capacity)
	{
		_array = (DataType*)malloc(sizeof(DataType*) * capacity);
		if (nullptr == _array)
		{
			perror("malloc失败");
			return;
		}
		_capacity = capacity;
		_size = 0;
	}

	void Push(const DataType& data)
	{
		//扩容
		_array[_size] = data;
		++ _size;
	}
	DataType Top()
	{
		return _array[_size - 1];
	}
	void Destroy()
	{
		if (_array)
		{
			free(_array);
			_array = nullptr;
			_capacity = 0;
			_size = 0;
		}
	}
	DataType* _array;
	size_t _capacity;
	size_t _size;
};

int main()
{
	Stack s;
	s.Init(10);
	s.Push(1);
	s.Push(2);
	s.Push(3);
	s.Push(4);
	cout << s.Top() << endl;
	s.Destroy();
}

上面结构体的定义,在C++中喜欢用class代替

3.类的定义

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

 

class 定义类的 关键字, ClassName 为类的名字, {} 中为类的主体,注意 类定义结束时后面
号不能省略
类体中内容称为 类的成员: 类中的 变量 称为 类的属性 成员变量 ; 类中的 函数 称为 类的方法 或者
成员函数

类的两种定义方式:

3.1声明和定义全部放在类体中
需注意:成员函数如果在类中定义,编译器可能会将其当成联函数处理。
 
class Person
{
public:
	//公共信息
	void ShowInfo()
	{
		cout << _name << "-" << _sex << "-" << _age << endl;
	}
private:
	char* _name;
	char* _sex;
	int _age;
};

2. 类声明放在.h文件中

成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名:: 

//#include"f.h"
class Person
{
public:
	//公共信息
	void ShowInfo();
private:
	char* _name;
	char* _sex;
	int _age;
};
#include"f.h"
void Person::ShowInfo()
{
	cout << _name << "-" << _sex << "-" << _age << endl;
}

 

4.类的访问限定符及封装

4.1访问限定符
C++ 实现封装的方式: 用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选 择性的将其接口提供给外部的用户使用。

 

【访问限定符说明】
1. public 修饰的成员在类外可以直接被访问
class Sutdent
{
public:
	void Print() {
		cout << "zhang" << ' ' << "nan" << ' ' << 22 << endl;
	}

private:

};

int main()
{
	Sutdent s;
	s.Print();
	return 0;
}

2. protected private 修饰的成员在类外不能直接被访问 ( 此处 protected private 是类似的 )
3. 访问权限 作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
class Sutdent
{
public:
	void Print() {
		cout << "zhang" << ' ' << "nan" << ' ' << 22 << endl;
	}

//private:
	int a = 20;
	int b = 20;
	void Add()
	{
		cout << a + b << endl;
	}
};

int main()
{
	Sutdent s;
	s.Print();
	s.Add();
	return 0;
}

4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class 的默认访问权限为 private struct public( 因为 struct 要兼容 C)

 注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

4.2封装
面向对象的三大特性: 封装、继承、多态
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。
封装本质上是一种管理,让用户更方便使用类

 

5.类的作用域

类定义了一个新的作用域 ,类的所有成员都在类的作用域中 在类体外定义成员时,需要使用 ::
作用域操作符指明成员属于哪个类域。

 

class Person
{
public:
	void PrintPersonInfo();
private:
	char _name[20]="zhang";
	char _sex[10]="nan";
	int _age=20;
};

void Person::PrintPersonInfo()
{
	cout << _name << " " << _sex << " " << _age << endl;
}
int main()
{
	Person s;
	s.PrintPersonInfo();
	return 0;
}

6.类的实例化

6.1概念

在面向对象的编程中,用已经定义好的类,创建该类对象的过程

1. 类是对对象进行描述的 ,是一个 模型 一样的东西,限定了类有哪些成员,定义出一个类 并没
有分配实际的内存空间 来存储它;比如:入学时填写的学生信息表,表格就可以看成是一个
类,来描述具体学生信息。
2. 一个类可以实例化出多个对象, 实例化出的对象 占用实际的物理空间,存储类成员变量
3.类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图。

 

class Person
{
public:
	void PrintPersonInfo();
public:
	const char* _name;
	const char* _sex;
	int _age;
};

void Person::PrintPersonInfo()
{
	cout << _name << " " << _sex << " " << _age << endl;
}
int main()
{
	Person s;
	s._age = 20;
	s._sex = "男";
	s._name = "zhang";
	s.PrintPersonInfo();
	return 0;
}

 

7.类的对象模型

7.1如何计算类对象的大小
class Student
{
public:
	void Print()
	{
		cout << _a << endl;
	}
private:
	char _a;
};

int main()
{
	cout << sizeof(Student) << endl;
	return 0;
}

 结论:一个类的大小,实际就是该类中成员变量之和,当然要注意内存对齐

注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。
7.2结构体内存对齐规则
1. 第一个成员在与结构体偏移量为 0 的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS 中默认的对齐数为 8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

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

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

相关文章

Hadoop3:MapReduce中的Partition原理及自定义Partition

一、默认Partition分区配置 以WC案例来进行验证。 1、设置setNumReduceTasks 修改的代码 这行代码&#xff0c;确定了reduceTask的数量&#xff0c;也确定了分区逻辑 在mapper文件中&#xff0c;打上断点 计算分区的代码 这里会对每一个kv进行计算&#xff0c;然后&#…

STM32F4 STD标准库串口接收中断+空闲中断例程

STM32F4 STD标准库串口接收中断空闲中断例程 &#x1f516;工程基于STM32F446 ✨用惯了STM32CubeMX傻瓜式配置&#xff0c;突然改用标准库写代码&#xff0c;初始化外设内容&#xff0c;总是丢三落四的。 &#x1f4d7;串口初始化配置 void uart_init(uint32_t bound) {//GPIO…

基于51单片机FM数字收音机设计

基于51单片机FM数字收音机 &#xff08;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 该系统利主要由STC89C51单片机、液晶显示器、按键、调频收音模块TEA5767、功放LM386组成。 1.收音芯片采用TEA5767模块&…

最新PHP仿猪八戒任务威客网整站源码/在线接任务网站源码

资源介绍 老规矩&#xff0c;截图为亲测&#xff0c;前后台显示正常&#xff0c;细节功能未测&#xff0c;有兴趣的自己下载。 PHP仿猪八戒整站源码下载&#xff0c;phpmysql环境。威客开源建站系统&#xff0c;其主要交易对象是以用户为主的技能、经验、时间和智慧型商品。经…

阿里云域名解析

阿里云域名控制台&#xff1a;https://dc.console.aliyun.com/next/index#/domain-list/all

Mobvista汇量科技解析奥运机会点及营销理念,看广告投放如何抢占先机

四年一度的奥运盛会&#xff0c;作为少有能跨越文化、宗教、种族、行为等各方面差异的体育事件&#xff0c;更能广泛吸引全球观众的目光&#xff0c;成为品牌方和广告主天然的流量磁铁。应用增长平台Mobvista汇量科技为助力各行业开发者、各品牌商家抢占奥运流量&#xff0c;分…

搜维尔科技邀您共赴2024第四届轨道车辆工业设计国际研讨会

会议内容 聚焦“创新、设计、突破”&#xff0c;围绕“面向生命健康、可持续发展的轨道交通系统” 为主题&#xff0c;从数字化、智能化、人性化、绿色发展等方面&#xff0c;探索轨道交通行业的设计新趋势及发展新机遇。 举办时间 2024年7月10日-12日 举办地点 星光岛-青岛融…

串扰(二)

三、感性串扰 首先看下串扰模型及电流方向&#xff1a; 由于电感是阻碍电流变化&#xff0c;受害线的电流方向和攻击线的电流方向相反。同时由于受害线阻抗均匀&#xff0c;故有Vb-Vf&#xff08;感应电流属于电池内部电流&#xff09;。 分析感性串扰大小仍然是按微分的方法…

三个“消失” 折射债市新变化

资金分层现象逐步消失&#xff1b;低位的DR007利率已不常见&#xff1b;债市中一度盛行的“滚隔夜”也在逐渐减少。 当前&#xff0c;债券市场正在出现一系列显著变化&#xff1a;资金分层现象逐步消失&#xff1b;低位的DR007利率已不常见&#xff1b;债市中一度盛行的“滚隔…

坚持刷题|反转链表

文章目录 题目思考实现1. 迭代方式实现链表翻转2. 递归方式实现链表翻转 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持刷题&#xff0c;老年痴呆追不上我&#xff0c;今天继续链表&#xff1a;反转链表 题目 LCR 024. 反转链表 思考 翻转链表是一个常见的算法问题&a…

杂说咋说-关于城市化发展和城市治理的几点建议(浙江借鉴)

杂说咋说-关于城市化发展和城市治理的几点建议&#xff08;浙江借鉴&#xff09; 近年来&#xff0c;浙江省坚持一张蓝图绘到底&#xff0c;推动城市化发展和城市治理不断迈上新台阶&#xff0c;全省城市化水平和城市治理能力牢牢居于全国第一方阵。当前&#xff0c;国内外环境…

男内裤哪个品牌质量好?口碑最好的男士内裤品牌

男士内裤&#xff0c;作为男士日常穿着的必需品&#xff0c;选择一款合适的内裤对于男士的健康和舒适度至关重要。然而&#xff0c;市面上男士内裤品牌众多&#xff0c;款式各异&#xff0c;让人眼花缭乱。那么&#xff0c;买男士内裤选择哪一款好呢&#xff1f;下面&#xff0…

【云原生】Kubernetes----证书过期处理办法

目录 引言 一、证书过期的问题与影响 二、解决方案 &#xff08;一&#xff09;查看证书剩余时间 &#xff08;二&#xff09;备份重要数据 &#xff08;三&#xff09;更新证书 &#xff08;四&#xff09;重启相关组件的pod 引言 随着云计算技术的飞速发展&#xff0…

Building wheels for collected packages: mmcv, mmcv-full 卡住

安装 anime-face-detector 的时候遇到一个问题&#xff1a;Installation takes forever #1386&#xff1a;在构建mmcv-full时卡住&#xff0c;这里分享下解决方法&#xff08;安装 mmcv 同理&#xff0c;将下面命令中的 mmcv-full 替换成 mmcv&#xff09; 具体表现如下&#x…

视频监控管理平台智能边缘分析一体机安防监控平台离岗检测算法

在工业自动化和智能制造的背景下&#xff0c;智能边缘分析一体机的应用日益广泛。这些设备通常在关键岗位上执行监控、分析和数据处理任务。然而&#xff0c;设备的稳定运行至关重要&#xff0c;一旦发生故障或离岗&#xff0c;可能会导致生产线停滞甚至安全事故。因此&#xf…

MySQL之复制(五)

复制 复制的原理 复制文件 3.master.info 这个文件用于保存备库连接到主库所需要的信息&#xff0c;格式为纯文本(每行一个值)&#xff0c;不同的MySQL版本&#xff0c;其记录的信息也可能不同。此文件不能删除&#xff0c;否则备库在重启后无法连接到主库。这个文件以文本的…

浅谈设计师的设计地位

在当今这个创意无限的时代&#xff0c;设计师的地位日益凸显。他们以独特的视角和精湛的技能&#xff0c;为我们的生活带来了无尽的色彩与灵感。然而&#xff0c;随着行业的不断发展&#xff0c;设计师如何在众多同行中脱颖而出&#xff0c;提升自己的设计地位呢&#xff1f;答…

openwrt 编译(x86)——新手上路之详细教程(有问题请在评论区,本人刚从头搞完,大家一起探讨)

写在前面 本人有加速器&#xff0c;无加速器请移步别处。 本人希望这篇可以让一个小白&#xff08;比如本人&#xff09;能够顺利的完成openwrt的编译。如有问题请大家指正。 本文参考文献&#xff1a; https://blog.csdn.net/qq_33195791/article/details/138462502 https://…

信息打点web篇----企业宏观资产打点

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 专栏描述&#xff1a;因为第一遍过信息收集的时候&#xff0c;没怎么把收集做回事 导致后来在实战中&#xff0c;遭遇资产获取少&#xff0c;可渗透点少的痛苦&#xff0c;如今决定 从头来过&#xff0c;全面全方位…

灰度图像直方图均衡化

文章目录 1.实验目的2.需求3.代码4.实验结果 1.实验目的 了解一种最基本的图像增强技术&#xff0c;本质上是对灰度图像进行灰度变换。 2.需求 对给定图像进行灰度直方图展示&#xff0c;然后均衡化后再次展示 3.代码 import cv2 as cv import numpy as np from matplotli…