C++中可以使用struct、class来定义一个类

#include<iostream>
using namespace std;//class Person {//  //成员变量
//  int age;
//  //成员函数
//  void run() {//      cout << "Person is running" <<age<<endl;
//  }
//};struct Person {int age;//C++ struct可以定义函数 void run() {cout << "Person is running" << endl;}
};
int main() {//用类创建对象Person person;person.age = 10;person.run();return 0;
}
  • struct和class的区别
    struct的默认成员权限是public
    class的默认成员权限是private

C++编程规范
每个人都可以有自己的编程规范,没有统一的标准,没有标准答案,没有最好的编程规范
全局变量:g_ globe
成员变量:m_ member
静态变量:s_ static
常量:c_ constant
使用驼峰标识

对象的内存布局
如果类中有多个成员变量,对象的内存又是如何布局的?

this

#include<iostream>
using namespace std;struct Person {int age;//C++ struct可以定义函数 void run() {cout << "Person is running" <<age<< endl;}
};
int main() {//思考:person1的age是存放在person1的内存中,person2的age是存放在person2的内存中//run()是放在struct的内存中,它们在调用run()方法时是直接通过调用地址值来调用run()方法的。//但是它们调用run()时,为什么打印的结果不同?Person person1;person1.age = 10;person1.run();Person person2;person2.age = 20;person2.run();return 0;
}


上述代码,person.age是存放在栈空间,所调用的run()方法时放在代码区。
so,代码区的person.run()访问到了栈空间的age。
按照以上描述,可以这样设计:提供一个指针来找到age所对用的栈空间。

这个指针就是this。this在调用方法时是一个隐式参数,不用我们去编写,编译器自动在方法中生成并通过对象传到方法里面。所以,不同对象this对应的是自己的地址值。this指向了函数的调用者。
◼ 可以利用this.m_age来访问成员变量么?
不可以,因为this是指针,必须用this->m_age


再看看多个变量的情况。有连续的存储空间。
原理:
1.从指针中取出对象的地址;
2.利用对象的地址+成员变量的偏移量计算出成员变量的地址

int main() {Person person;Person *p = &person;p->age = 10;p->height = 180;p->weight = 140;return 0;
}Person *p = &person;010C1FA2  lea         eax,[person]  010C1FA5  mov         dword ptr [p],eax
p->age = 10;010C1FA8  mov         eax,dword ptr [p]  010C1FAB  mov         dword ptr [eax],0Ah
p->height = 180;010C1FB1  mov         eax,dword ptr [p]  010C1FB4  mov         dword ptr [eax+4],0B4h  //eax+4 连续存储空间。eax是p的地址值。
p->weight = 140;010C1FBB  mov         eax,dword ptr [p]  010C1FBE  mov         dword ptr [eax+8],8Ch

思考:

封装

堆空间

#include<iostream>
using namespace std;struct Person {public:int age;int height;int weight;};
int main() {//申请int *p = (int *)malloc(4);//返回首地址,double型的*p = 10;//释放free(p);//可以自由支配自己申请的内存空间char* p = (char*)malloc(4);//赋值首地址*p = 10;*(p + 1) = 11;*(p + 2) = 12;*(p + 3) = 13;return 0;
}


new/delete 申请堆空间
new int —不初始化
new int()—初始化为0
new int(1)—初始化为1

int main() {//申请 new deleteint* p = new int;*p = 10;delete p;//向堆空间申请char类型的数组char* p = new char[4];delete[] p;return 0;
}

memset

zz

小码哥C++_面向对象相关推荐

  1. 零基础轻松学python pdf 小码哥_零基础轻松学Python

    零基础轻松学Python电子书 Python之父Guido van Rossum力荐的Python门书.本书以通俗易懂的语言.好玩有趣的案例让读者轻轻松松.循序渐地从零始掌握Python 3 编程.本 ...

  2. naarray查询 swift_从入门到精通Swift编程(完整 未加密 小码哥) [16.3G]

    目录:/从入门到精通Swift编程(完整 未加密 小码哥) [16.3G] : U! s1 a8 i- s+ O, c7 i      ┣━━01-基础语法.汇编初探 [367.2M]# D% l* ...

  3. 百度松果 小码哥考研小技巧 (概率期望)

    题目描述 要考研了,小码哥非常焦急,他要开始背英语单词,每个单词的长度是lil_ili​ ,小码哥有pipipi的概率认识这个单词,小码哥要从一个有nnn个单词的总清单里按顺序的背单词,小码哥有一个认 ...

  4. 你好2017! 再见2015, 再见小码哥!

    一根筋教育总监李南江致全体同仁的一封公开信 各位同仁,同学们: 大家好! 2015年的今天我发布了一篇日志"决定加入一个全新的IT培训品牌小码哥(中英双语版)", 怀揣着对教育的热 ...

  5. 03小码哥通讯录(数据存储)

    // // XMGContact.m // 小码哥通讯录 #import "XMGContact.h"@implementation XMGContactstatic NSStri ...

  6. 小码哥iOS--玩转【斗鱼直播APP】系列之直播总体概览

    直播总体概览 概述 直播的现状 2016年,是一个直播年.直播行业快速发展,同时也滋生了大大小小上千家相关的公司. 中国互联网络信息中心发布的报告显示,截至今年6月,我国网络直播用户规模达到3.25亿 ...

  7. 小码哥考研技巧(求背单词长度的最大期望)

    输入: 3 100 6 100 8 100 10 输出: 326.12 考点:1.求最大期望的话需要对n个单词的长度和认识概率进行动态数组排序 2.对精度有所要求 理论解析:无论小码哥有没有背到认识的 ...

  8. 小码哥iOS拓展班2期

    小码哥iOS拓展班2期,视频全套不加密,有FM,直播,RAC,汇编项目,源码文档齐全. 注: 视频分为破解版和重录版,破解版码哥课堂和直播项目不全:重录版所有的视频和文档都是齐全的,只有直播项目第一天 ...

  9. 可怜的小码哥 马蹄集

    可怜的小码哥 难度:黄金 时间限制:1秒 巴占用内存:128M 提瓦特大陆上有一个贫穷的占星术士小码哥,出于占星术的要求,他时常要解 决一些困难的数学问题.这天,他有遇到一个难题:对于一给定的素数集合 ...

  10. css动画唯美背景,小码哥-利用CSS3渐变实现唯美背景图

    原标题:小码哥-利用CSS3渐变实现唯美背景图 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必须使用图像来实现这些效果.但是,通过使用 CSS3 渐 ...

最新文章

  1. SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单?
  2. 软考网络工程师--计算机硬件基础
  3. 高中生计算机专业的研究论文,高中计算机个性化教学模式研究的论文
  4. 数据挖掘——数据仓库
  5. LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)
  6. pip install mysqlclient报错fails with EnvironmentError: mysql_config not found
  7. Java-整数相加求和
  8. sketch设置字体技巧(二)---通过组合法重新组建字体
  9. 【Linux】Windows 10 安装应用商店 ubuntu 终端后访问本地文件
  10. MySQL GUI图形化界面常用软件推荐
  11. mysql syncrelaylog_MySQL 5.7复制延迟之sync_relay_log
  12. 【Linux 应用编程】进程管理 - 进程、线程和程序
  13. 基于Go的马蜂窝旅游网分布式IM系统技术实践
  14. refresh是什么?Spring refresh的12个步骤
  15. caffe的Leveldb格式数据一(官方介绍)
  16. 卡莱特led显示屏调试教程_如何使用卡莱特软件点亮LED电子显示屏
  17. 日语语法(二):名词
  18. 我的世界java怎么自制皮肤_我的世界手机版皮肤怎么做 自己做皮肤教程
  19. 【T+】畅捷通T+自定义报表将所有月份发生数在同一张表上体现
  20. 显示屏漏光会有什么影响

热门文章

  1. python词云生成与设计实现_python简单词云生成
  2. redis分布式锁和调度锁
  3. 货币等额换算_换算单位和货币的最佳免费程序和网站
  4. ips入侵防御系统部署
  5. 毛哥的快乐生活(1) 猫哥与毛哥
  6. 深度学习图像处理目标检测图像分割计算机视觉 10--通用场景图像分割
  7. pycharm 全局搜索快捷键
  8. android内核调试
  9. Autovue 21.0.2.5 在2020年7月份发布
  10. 日语——动词的各种变形