C++笔记(二)

二、面向对象

2.1、类

  • 使用struct、class来定义类
  • struct和class的区别(唯一区别):struct默认成员变量权限是public,class默认是private;
void test(){};
struct Person{
    int age;
    void (*run)() = test;    //过去的C为了在结构体中使用函数,定义函数指针
}
struct Person{    //不推荐
    int age;
    void run(){
        cout<<"run()->"<<age<<endl;
    }
}
class Person{     //推荐使用class
    int age;
    void run(){
        cout<<"run()->"<<age<<endl;
    }
}
  • 类对象、以及指向对象的类指针的内存都是在函数的栈空间,自动分配和回收的;

2.2、this

  • 内存布局:
  1. 栈区:自动分配回收;创建对象、调用函数会自动分配一段连续栈空间;
  2. 堆区:需要主动去申请和释放;
  3. 代码区:用于存放代码;
  4. 全局区:用于存放全局变量;
  • this指针存储了函数调用者的地址,this指针指向了函数调用者;
  • 如何用指针间接访问所指向对象的成员变量
  1. 从指针中取出对象象地址值;
  2. 用对象地址值+成员变量偏移量计算出成员变量地址;
  3. 根据成员变量的地址访问成员变量的存储空间

2.3、0xcccccccc

0xcccccccc---->int3:起到断点的作用

初始栈空间填充0xcccccccc,防止函数误跳转到该处执行,如果跳转到该处则会发生中断;

2.4、封装

set、get

2.5、内存空间布局

  • 内存布局:
  1. 栈区:自动分配回收;创建对象、调用函数会自动分配一段连续栈空间;
  2. 堆区:需要主动去申请和释放;
  3. 代码区:用于存放代码;
  4. 全局区:用于存放全局变量;程序运行期间一直存在;
  • malloc、free
void test(){
      int *p=(int*)malloc(4);
      *p=4;
      free(p);
}
  • new、delete
void test(){
      int *p=new int;
      *p=4;
      delete p;
}
void test1(){
      int *p=new int[4];
      *p=4;
      delete[] p;
}

申请堆空间成功后,会返回那一段内存空间的地址

  • 堆空间初始化
void test(){
    int size=sizeof(int)*10;
    int *p=(int*)malloc(size);
    //将p地址开始的连续40个字节的每一个字节都设置为1
    memset(p,1,size);
    free(p);
}
int *p=new int;      //可能未初始化,不同平台不一样
int *p=new int();    //初始化为0
int *p=new int(5);     //初始化为5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值