C++速学day2

news2024/11/18 23:28:17

xia复习

上一天的学习内容:

重点:1、封装———— 就是对类的抽象 ,将一种对象的共性 抽象成一个类。

           2、三个函数——-构造函数/复制构造函数/析构函数

注意:析构函数和构造函数的调用顺序刚好相反。

新内容

两个类的关系

1、     has-a  //

类的组合  ,描述的就是一个类内嵌其他类的对象作为成员的情况,他们之间的关系是一种包含和被包含的关系。

eg: //在线类中内嵌两个点的对象

class Point
{
public:
    Point(int x=0, int y=0);
    Point(const Point &other):m_x(other.m_x),m_y(other.m_y)
    {
        cout<<"&Point" <<endl;
    }
    ~Point()
    {
        cout<<"~Point" <<endl;
    }
    void setX(int x);
    void setY(int y);
    int getX();
    int getY();
    void show();
private:
    int m_x, m_y;
};

Point::Point(int x, int y):m_x(x),m_y(y)
{
    cout<<"Point(int )" <<endl;
}

void Point::setX(int x)
{
    m_x = x;
}

void Point::setY(int y)
{
    m_y = y;
}

void Point::show()
{
    cout<< m_x<<","<< m_y <<endl;
}

int Point::getX()
{
    return m_x;
}

int Point::getY()
{
    return m_y;
}

class Line
{
public:
    Line(int x1,int y1,int x2,int y2):m_p1(x1,y1),m_p2(x2,y2)
    {
        cout<< "Line (int int int int )"<< endl;
    }

    Line(const Point &p1,const Point &p2):m_p1(p1),m_p2(p2)
    {
        cout<< "Line (const Point &p1,&p2)"<< endl;
    }
    ~Line()
    {
        cout<< "~Line"<< endl;
    }
    void show()
    {
        m_p1.show();
        cout << "->"<< endl;
        m_p2.show();
    }
private:
    Point m_p1,m_p2;
};

2、     is-a  //

类的继承关系。

前向引用声明

class A;
class B
{
public:
    A *a;
    void fn(A &a)
    {
    }
}
class A
{
public:
    B *b;    
}

若是不在classB之前声明A B中的A对象的定义会报错。

而且这里在类中定义的不能是对象,需要是指针。或者是一个引用的值,不能是对象。

注意:在编程在多文件时注意尽量在源文件中包头文件,不在头文件中包头文件。

UML类图

示例如上

标识符作用域与可见性的问题

C++的比C语言扩展了一些问题:

1、类的作用域

      类内访问,类外访问

2、命名空间作用域

namespace 命名空间

namespace CD
{
	class Clock
	{
	
	};
	void foo()
	{
	
	}
}

namespace XA
{
	class Clock
	{
	
	};
}
int main(void)
{
    CD::Clock c;
}

这个时候创建的c 就是CD 命名空间的c 。

using CD::Clock;    //先声明CD中的Clock 这个函数 后面使用的时候 默认是CD命名空间的
后面使用的时候可以直接写函数或者类;

using namespace CD;
CD中所有的内容都不需要加”::“去访问。

匿名命名空间:

namespace
{
	class Clock
	{
		
	}
}

这个匿名命名空间的类和操作只能在本文件中使用。
(类似于C语言中全局变量前的static)
 

全局命名空间作用域
全局空间的标识符(函数)在使用时候加上两个::就是全局命名空间作用域的函数

void read()
{
    ::read(fd,p,10);    //这里的read就不是他自己而是全局命名空间作用域的read
}

作用域和作用域之间是可以互相包含的

1、标识符要声明在前,引用灾后
2、在同一作用域中,不能声明同名标识符
3、在没有相互包含关系的不同作用域中同名标识符互不相影响。
4、如果两个或多个具有包含关系的作用域,外层不可见

 

静态 : 生存期与程序运行周期相同 ---->  static  全局变量
动态 : 

static修饰之后 只会被创建一次 不会重复创建 并且结束时间为程序结束的时候。
若是加了static的静态变量 没有初始化 那它默认为  0;

匿名对象可以通过&来进行起别名
const Clock &ref = Clcok(10,20,30);
但此时的ref不能.showtime(); 只能读不能写。


&&ref 右值引用

lvalue  locatable
        如果可以取地址 就是左值
rvalue 
        如果不能取地址 就是右值
        
所有的匿名对象都是右值

右值向左值的转换
 &&i= 10;
 i = 100;
 此时输出就是100;

C++的循环:

int a[] = {1,2,3,4,5,6,7,8,9,0};
int len = sizeof(a) / sizeof(a[0]);

for(int x: a)             //base range for 
{
    cout << x << endl ;    
}

for(int i = 0; i < len ; ++i)
{
    cout<< a[i] <<endl ; 
}

他们两个输出结果相同。


单例模式:

23种设计模式其中之一  比较简单的  不适用虚函数的
单例模式:
一个类的类对象只能创建一个出来 这个类的对象只能有一个
这就是单例模式。

class SingelTon
{
public:
    static SingelTon * getIntance()
    {
        if(m_p == NULL)
        {
            m_p = new SingelTon;
        }
        return m_p;
    }
    static void destroyIntance()
    {
        delete m_p;
        m_p = NULL;
    }
    static int getCounter()
    {
        return counter;
    }
private:
    SingelTon()
    {
        counter++;
    }
    ~SingelTon()
    {
        counter--;
    }
    static SingelTon *m_p;
    static int counter;
};

SingelTon* SingelTon::m_p = NULL;
int SingelTon::counter;


SingelTon *p;
     p = SingelTon::getIntance();
     SingelTon *q;
     cout << SingelTon::getCounter() << endl;
     q = SingelTon::getIntance();
     cout << SingelTon::getCounter()<< endl;
     cout << p << endl;
     cout << q << endl;
     SingelTon::destroyIntance();
     cout << SingelTon::getCounter()<< endl;

	 
输出结果:
1
1
0x1c02280
0x1c02280
0

this指针

c1.showtime();
调用类中的函数时 其实函数传入了参数 &c1。
间接传了个参数    这个指针是 this 指针 
   
类的静态成员函数中不存在this指针!

常数据成员 必须进行初始化
常引用之后 必须按照常量 去使用了

const int i 在定义的时候必须要初始化。在类中也要用初始化列表进行初始化const常量

注意:C++中不能通过指针来修改变量

强制类型转换

四个是用来进行强转的关键字。

或者 const_cast <int * >(& i)   //这个就是把 const int* 强转成int *

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

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

相关文章

巨能涨!用AI做沙雕日常图文号,闭眼出大爆款!接个软广3000+!

家人们&#xff01;最近圈子陆续整理了一波在小红书上&#xff0c;适合植入软广的AI小红书商单玩法案例&#xff0c;例如&#xff1a;AI美女博主账号、AI养生博主账号、AI治愈插画Vlog短视频账号等等&#xff0c;接下来也会持续输出更多高价值的软广案例玩法。 今天刚好在刷小…

【python】PyQt5中QButtonGroup的详细用法解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

正点原子imx6ull-mini-Linux驱动之Linux 网络驱动实验

网络驱动是 linux 里面驱动三巨头之一&#xff0c;linux 下的网络功能非常强大&#xff0c;嵌入式 linux 中也常 常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动&#xff0c;本章我们就来学习一下 linux 里面的网络设备驱动。 1&#xff1a;嵌入式网络简介 1.1…

Pandas中高效的“For循环”

循环是我们编程技能中的一项固有技能。当我们熟悉任何编程语言时&#xff0c;循环就会成为一个基本的、易于解释的概念。 在这篇博文中&#xff0c;我们将探索遍历pandas dataframe的各种方法&#xff0c;检查每个循环方法的相关运行时。为了验证循环的有效性&#xff0c;我们…

3D开发工具HOOPS如何实现数字孪生高效的模型设计和分析?

数字孪生技术通过创建物理对象或系统的虚拟模型&#xff0c;实时反映其状态和行为&#xff0c;从而实现监控、优化和预测。这一技术在智能制造、建筑、城市规划等领域有着广泛应用。HOOPS SDK作为一套功能强大的软件开发工具包&#xff0c;为数字孪生技术的实现提供了全面支持。…

【启明智显分享】烹饪机HMI超值之选:个位数价工业级芯片Model3C点亮4.3寸触摸彩屏

一、方案背景 在快节奏的现代生活中&#xff0c;人们对于美食的追求从未停止&#xff0c;但繁琐的烹饪过程却常常让人望而却步。为了满足人们既能轻松享受美味又能节省时间和精力的需求&#xff0c;自动烹饪机应运而生。目前&#xff0c;自动烹饪机发展也越来越成熟&#xff0…

数据结构 - 哈希表

文章目录 前言一、哈希思想二、哈希表概念三、哈希函数1、哈希函数设计原则2、常用的哈希函数 四、哈希冲突1、什么是哈希冲突2、解决哈希冲突闭散列开散列 五、哈希表的性能分析时间复杂度分析空间复杂度分析 前言 一、哈希思想 哈希思想&#xff08;Hashing&#xff09;是计…

振动分析-18-基于振动分析进行故障诊断的思路和步骤

参考树立正确的振动诊断思路 参考振动分析相关知识的储备及振动分析仪的局限性 参考如何进行振动分析诊断(译文) 1 正确的故障诊断意识 我们通常在学习班听到的是大学教授以及专家讲解的故障诊断的基础理论,对于刚接触这个专业的人来说,微分方程和复杂的矩阵却有点让人忘…

数据库篇--八股文学习第十六天| MySQL的执行引擎有哪些?;MySQL为什么使用B+树来作索引;说一下索引失效的场景?

1、MySQL的执行引擎有哪些&#xff1f; 答&#xff1a; MySQL的执行引擎主要负责查询的执行和数据的存储, 其执行引擎主要有MyISAM、InnoDB、Memery 等。 InnoDB引擎提供了对事务ACID的支持&#xff0c;还提供了行级锁和外键的约束&#xff0c;是目前MySQL的默认存储引擎&…

227还原实战(三)

调转符号 为了方便后面处理 &#xff0c;我们先将所有的 二项表达式 进行预处理&#xff0c;将标识符放在左边&#xff0c; 数字放在右边&#xff0c; 比较简单&#xff0c;不多解释 转换逗号表达式 这里还原逗号表达式就要简单很多&#xff0c;主要是还原三元外的逗号表达式…

Agent知识库:功能、原理浅析

随着LLM不断发展&#xff0c;基于LLM的Agent今年来十分火热。Agent知识库不仅可以存储大量的信息&#xff0c;还包含了丰富的规则、算法和模型&#xff0c;是Agent实现智能化决策和行动的关键。本文将介绍Agent知识库的功能、原理以及相关落地应用。 概览 能力 1.Knowledge&a…

UDP端口可达性检测(端口扫描)工具开发

UDP端口可达性检测(端口扫描)工具开发 1、应用场景分析 主机X与主机Y部署在AB双网环境下&#xff0c;两个主机间通过UDP协议进行数据交互。应用程序发送数据时&#xff0c;优先使用A网发送数据&#xff0c;如果A网异常则通过B网发送数据。两个主机应用间没有设置心跳帧 &…

Vue 3+Vite+Eectron从入门到实战系列之(四)一Electron热身运动(二)

在electron里面能不呢实现暗黑模式和明亮模式的切换&#xff1f;我们怎么读取主进程里面的数据和系统数据。这篇就是来实现这几个效果的 实现效果 更改系统的主题色 在 App.vue 中添加代码。 <el-button type"warning" click"changeTheme">更改系…

Python 进行反射和元编程

反射和元编程是Python中两种强大且高级的编程技术。反射允许程序在运行时检查和修改自身结构和行为&#xff0c;而元编程则是编写可以操作其他代码的代码&#xff0c;通常通过使用元类、装饰器等技术来实现。 1. 反射 反射是指程序在运行时检查和操作自身结构的能力。Python通…

【Dash】使用 dash_mantine_components 创建图表

一、Styling Your App The examples in the previous section used Dash HTML Components to build a simple app layout, but you can style your app to look more professional. This section will give a brief overview of the multiple tools that you can use to enhan…

日常知识点之阿里云服务器提示禁用了密码登录方式

使用阿里云服务器进行一些实例测试时&#xff0c;发现业务启动后&#xff0c;服务器连接卡死&#xff0c;重连显示拒绝密码登录。 尝试好几次&#xff0c;因为在做的业务&#xff0c;怀疑可能时磁盘或者内存导致&#xff0c;但是&#xff0c;这玩意为啥会导致拒绝密码登录也是…

【C++】初识面向对象:类与对象详解

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性 本章将介绍C中一个重要的概念——类。通过类&#xff0c;我们可以类中定义成员变量和成员函数&#xff0c;实现模块化封装&#xff0c;从而构建更加抽象和复杂的工程。 &…

springboot约车APP-计算机毕业设计源码96773

基于Spring Boot的约车APP设计与实现 摘要 本文基于Spring Boot框架设计并实现了一款约车APP&#xff0c;旨在为用户提供便捷的出行服务。通过后端Spring Boot框架和前端交互界面的设计&#xff0c;实现了用户快速叫车、实时定位、路线规划等功能。系统结合了高效的后端处理和直…

LVS 调度器 nat和DR模式

lvs-nat 修改请求报文的目标IP,多目标IP的DNAT 配置网络 LVS主机 注意网卡的顺序 &#xff08;nat和主机模式&#xff09; [rootlvs ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 typeethernet interface-nameens160 ​ [ip…

[Unity]在场景中随机生成不同位置且不重叠的物体

1.前言 最近任务需要用到Unity在场景中随机生成物体&#xff0c;且这些物体不能重叠&#xff0c;简单记录一下。 参考资料:How to ensure that spawned targets do not overlap ? 2.结果与代码 结果如下所示&#xff1a; 代码如下所示&#xff1a; using System.Collec…