小码哥C++_面向对象
类
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++_面向对象相关推荐
- 零基础轻松学python pdf 小码哥_零基础轻松学Python
零基础轻松学Python电子书 Python之父Guido van Rossum力荐的Python门书.本书以通俗易懂的语言.好玩有趣的案例让读者轻轻松松.循序渐地从零始掌握Python 3 编程.本 ...
- naarray查询 swift_从入门到精通Swift编程(完整 未加密 小码哥) [16.3G]
目录:/从入门到精通Swift编程(完整 未加密 小码哥) [16.3G] : U! s1 a8 i- s+ O, c7 i ┣━━01-基础语法.汇编初探 [367.2M]# D% l* ...
- 百度松果 小码哥考研小技巧 (概率期望)
题目描述 要考研了,小码哥非常焦急,他要开始背英语单词,每个单词的长度是lil_ili ,小码哥有pipipi的概率认识这个单词,小码哥要从一个有nnn个单词的总清单里按顺序的背单词,小码哥有一个认 ...
- 你好2017! 再见2015, 再见小码哥!
一根筋教育总监李南江致全体同仁的一封公开信 各位同仁,同学们: 大家好! 2015年的今天我发布了一篇日志"决定加入一个全新的IT培训品牌小码哥(中英双语版)", 怀揣着对教育的热 ...
- 03小码哥通讯录(数据存储)
// // XMGContact.m // 小码哥通讯录 #import "XMGContact.h"@implementation XMGContactstatic NSStri ...
- 小码哥iOS--玩转【斗鱼直播APP】系列之直播总体概览
直播总体概览 概述 直播的现状 2016年,是一个直播年.直播行业快速发展,同时也滋生了大大小小上千家相关的公司. 中国互联网络信息中心发布的报告显示,截至今年6月,我国网络直播用户规模达到3.25亿 ...
- 小码哥考研技巧(求背单词长度的最大期望)
输入: 3 100 6 100 8 100 10 输出: 326.12 考点:1.求最大期望的话需要对n个单词的长度和认识概率进行动态数组排序 2.对精度有所要求 理论解析:无论小码哥有没有背到认识的 ...
- 小码哥iOS拓展班2期
小码哥iOS拓展班2期,视频全套不加密,有FM,直播,RAC,汇编项目,源码文档齐全. 注: 视频分为破解版和重录版,破解版码哥课堂和直播项目不全:重录版所有的视频和文档都是齐全的,只有直播项目第一天 ...
- 可怜的小码哥 马蹄集
可怜的小码哥 难度:黄金 时间限制:1秒 巴占用内存:128M 提瓦特大陆上有一个贫穷的占星术士小码哥,出于占星术的要求,他时常要解 决一些困难的数学问题.这天,他有遇到一个难题:对于一给定的素数集合 ...
- css动画唯美背景,小码哥-利用CSS3渐变实现唯美背景图
原标题:小码哥-利用CSS3渐变实现唯美背景图 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡. 以前,你必须使用图像来实现这些效果.但是,通过使用 CSS3 渐 ...
最新文章
- SAP RETAIL 寄售模式公司间STO流程里收货过账不能基于外向交货单?
- 软考网络工程师--计算机硬件基础
- 高中生计算机专业的研究论文,高中计算机个性化教学模式研究的论文
- 数据挖掘——数据仓库
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)
- pip install mysqlclient报错fails with EnvironmentError: mysql_config not found
- Java-整数相加求和
- sketch设置字体技巧(二)---通过组合法重新组建字体
- 【Linux】Windows 10 安装应用商店 ubuntu 终端后访问本地文件
- MySQL GUI图形化界面常用软件推荐
- mysql syncrelaylog_MySQL 5.7复制延迟之sync_relay_log
- 【Linux 应用编程】进程管理 - 进程、线程和程序
- 基于Go的马蜂窝旅游网分布式IM系统技术实践
- refresh是什么?Spring refresh的12个步骤
- caffe的Leveldb格式数据一(官方介绍)
- 卡莱特led显示屏调试教程_如何使用卡莱特软件点亮LED电子显示屏
- 日语语法(二):名词
- 我的世界java怎么自制皮肤_我的世界手机版皮肤怎么做 自己做皮肤教程
- 【T+】畅捷通T+自定义报表将所有月份发生数在同一张表上体现
- 显示屏漏光会有什么影响