首页 > 系统相关 >C++_内存模型和函数以及类

C++_内存模型和函数以及类

时间:2024-04-15 16:36:56浏览次数:25  
标签:初始化 函数 成员 C++ 嵌套 内存 变量 构造函数

C++内存模型

函数

函数与编译器

成员变量 
     class 内部通过 
	 static           修饰变量时,表示该变量为静态成员变量,必须在类外定义
	 static const     修饰变量时,表示该变量为静态成员常量,可以在类内初始化,或者在类外初始化
	 static constexpr 修饰变量时,表示该变量为静态成员常量,必须在类内初始化,并要求编译期间的其它常量来初始化该常量。

类:默认函数: 构造函数:构造函数作用是对对象进行初始化
 有初始化列表和构造函数体内赋值两种方式
  构造函数 没有返回类型  名称和类同名  参数可以有,也可以没有。
   构造函数    MyClass() {} // 默认构造函数 ,没有参数的构造函数称为默认构造函数,也称为无参构造函数  
   析构函数    ~MyClass() {} // 析构函数
   复制函数    MyClass(const MyClass& other) {} //
   移动函数	   MyClass(MyClass&& other) {} // 移动构造函 两个&操作符, 移动构造函数接收的是“右值引用”的参数。 
   赋值操作符 : 赋值操作符可以通过制定不同类型的右操作数而重载。 赋值和复制经常是一起使用的
   移动赋值函数
  拷贝构造函数: 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用 
  移动构造函数: 临时对象(右值)。用到临时对象的时候就会执行移动语义
   

嵌套类 Nested Class- 对类进行嵌套通常是为了帮助实现另一个类
  类A中 声明的类B被称为嵌套类(nested class)
    类A的成员函数可以创建和使用 嵌套类B的 对象
	对类进行嵌套和包含并不同。
	  包含意味着将类C对象作为类A的成员。
	而对类B进行嵌套不创建类成员,而是定义了一种类型,该类型仅仅在包含嵌套类声明的类A中有效。

构造函数参数列表与构造函数体之间使用冒号开始,逗号分隔的方式初始化数据成员。这种方式就是构造函数初始化器

使用:
  访问时通过“类名::变量名”方式访问该静态成员变量。

类与编译器

 成员变量 
     静态成员变量的存储位于全局\静态存储区,
	 
 嵌套类-内存分配: 	 

结构体

 C+++ 结构 内部的成员变量以及成员函数,默认具有public的属性
      成员函数 可以包括特殊的函数:构造函数和析构函数。
	C++中,结构体和类之间的区别就是默认的访问权限不同  

二进制文件解析

 1.字节顺序,大小和对齐方式。 

参考

https://docs.python.org/zh-cn/3.8/library/struct.html

标签:初始化,函数,成员,C++,嵌套,内存,变量,构造函数
From: https://www.cnblogs.com/ytwang/p/18136296

相关文章

  • 华为实习4.10机考第一题C++代码
    华为2024.4.10机考第一题C++代码第一题是一个关于字符串的模拟,但是对于C++来说,处理起来还是比较麻烦的。难点就是在输入时各字符串是用逗号分割的。#include<iostream>#include<unordered_map>#include<sstream>#include<vector>#include<algorithm>usingnamespacestd;......
  • 函数对象,闭包函数及装饰器了解
    函数对象【1】定义函数对象指的是函数可以被当做数据来处理【2】可以直接被引用定义一个函数用一个新的变量名来存,用新的变量名来调用#定义一个函数defadd(x,y):returnx+y#将函数地址绑定给一个变量func=add#通过这个变量找到对应的地址,从而调用函数res......
  • 记录解决VS 2022调试C++ DLL项目时卡顿的问题
    项目结构运行时为DotNet6的C#通过Cli/C++去调用C++的DLL。问题表现在VisualStudio2022中调试C++DLL代码时,按下F5、F10、F11跳转到下一行时VS卡顿会2秒左右,体验非常不好。问题原因然后发现原因是项目的配置属性中,调试那一行,调试器类型选择的是“自动”。解决此问题的方法......
  • hash()函数在python2和python3的区别
    在Python3中,对于字符串类型的对象,hash()函数会根据当前进程的种子值计算哈希值。这个种子值在每次Python进程启动时都会随机生成。因此,即使是相同的字符串,在不同的Python进程中调用hash()函数会得到不同的哈希值。这种设计的目的是为了增加哈希表的随机性,从而提高安全性......
  • 析构函数与 -O2 优化的一个问题
    在赋值时,我们需要先对原有对象调用析构函数。我的析构函数实现如下:~vector() { for(ptr*itr=begin_p;itr!=finish_p;itr++) { delete*itr; } delete[]begin_p; begin_p=nullptr;finish_p=nullptr;end_p=nullptr; }不使用-O2优化,程序运行正常,调用完析构函......
  • PHP strlen() 和mb_strlen()函数
    <?php   //测试时文件的编码方式要是UTF8   $str='中文a字1符';   echostrlen($str).'<br>';//14   echomb_strlen($str,'utf8').'<br>';//6   echomb_strlen($str,'gbk').'<br>';//8   echomb_s......
  • python-函数以及函数的返回值
    '''函数:把具有独立功能的代码块组合成一个个小模块作用:提高代码的效率,实现代码重复---流程标准化#可以在不同的地方多次调用,想要使用几次就使用几次,更加灵活,只需要调用,不需要重新定义'''#def函数名():#函数的定义#函数名需要复合标志符的命名规范(必须是字母,下划线,数......
  • C++对象封装后的内存布局
    在C语言中,数据和数据的处理操作(函数)是分开声明的,在语言层面并没有支持数据和函数的内在关联性,我们称之为过程式编程范式或者程序性编程范式。C++兼容了C语言,当然也支持这种编程范式。但C++更主要的特点在支持基于对象(object-based,OB)和面向对象(object-oriented,OO),OB和OO的基础是......
  • 定义存储过程和函数
    定义存储过程和函数本文出处:https://www.modb.pro/db/222642学习地址https://www.modb.pro/course/133学习目标学习openGauss定义存储过程和函数课后作业1.创建带有入参和出参的函数1,调用函数时使用按参数值传递和命名标记法传参omm=#createfunctionfunc_multiply(......
  • C / C++ 文件简单混编 + 轻量级日志系统使用
    在项目工程里面,不一定全部是c或者c++文件,有时候是混合一起,这个时候如果使用makefile编译的话,就要考虑兼容两种类型的文件编译了;实战经验如下:根据自己的风格制作响应的打印和日志记录,makefile编写如下:CC=gccCPP=g++#文件夹路径ROOTPATH=.INCLUDE=-I./cfg/inc-I$(......