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. 关于Vue实例的生命周期created和mounted的区别
  2. C++对象模型3——vptr的位置、手动调用虚函数、从汇编代码看普通调用和多态调用
  3. 华为云计算之储存基础知识
  4. 湘乡江南计算机学校,湘乡职业中等专业学校2021年招生录取分数线
  5. [Qt]用QItemDelegate的来修改QStandardItem字体颜色
  6. PHP面向对象之领域模型+数据映射器
  7. python七大神级插件_Maya神级插件 SOuP 和OpenVDB
  8. 质量管理体系文件分类
  9. Javascript中五种定义对象的方法
  10. 计算机上网络怎么连接,手机怎么连接电脑上网
  11. 笔记本电脑共享WiFi
  12. 干货分享!一份你不知道的武汉Web前端开发学习攻略
  13. PHP梯度计算金额,数字图像的梯度概念以及计算(the gradient of the image)
  14. 匹配字符串-正则表达式
  15. 线程sta模式_STA和MTA线程模式的区别
  16. 页面底部copyright部分制作过程中遇到的问题,解决以及总结
  17. linux下通过user-config.jam指定编译器编译boost
  18. ubuntu Git 使用教程
  19. ppk和pem文件互转
  20. 单源路径分支界限java_java单源最短路径算法

热门文章

  1. 【python】类型约束(类型提示的作用)
  2. 什么是机器学习(漫画版)
  3. 尚德机构退费难的问题
  4. 会说话的汤姆猫纪念徽章藏品上线,集齐赢实物盲盒!
  5. vue项目中使用ts入门
  6. html5 今日头条视频播放,今日头条app设置自动播放视频的方法
  7. ParticleEmitter旧粒子系统退役 2018新粒子系统
  8. 公认最好的鸿蒙系统,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  9. 怎么把计算机隐藏文件显示出来,隐藏文件夹怎么显示出来
  10. Tomcat,Servlet,JSP之间是什么关系?