2021-04-06

第五周嵌入式周结

C语言中隐式类型转换(char/int/long/float/double);属于强制类型转换,存在问题是不安全:不做类型检查,任何类型都可以互相转换。
显示类型转换

一、C++中的类型转换符

  • static_cast<>(expr):相关类型转换;void*和其他类型指针转换;父类与子类之间转换。 不能用于指针类型的转换。
  • const_cast<>(expr):去除指针与引用的const的属性。 使用该运算符意味着代码存在缺陷。
  • reinterpret_cast<>(expr):编译的过程可以将任意类型指针做转换;类似于C中的强制类型转换。(特点:不安全,即不在编译器期也不在运行期进行检查,安全性完全由程序员决定)
  • dynamic_cast<>(expr)

二、this指针
在形参上加this指针
定义一个对象就会生成一个this指针,指向当前操作的对象。
为什么用this指针?
同一个类实例的对象共享代码段(方法),为了区分哪个对象的成员,所以编译器会在编译阶段给类的所有方法加上this指针参数,用来指向当前操作对象。

三、C++的封装

  • class封装的本质,在于将数据和行为,绑定在一起然后通过对象来完成操作。
  • 类和对象实现封装。
  • 封装,可以达到对外提供接口,屏蔽数据,对内开放数据。
    作用:提高代码的维护性、保证代码的独立性(高内聚,低耦合)

四、构造函数—用来初始化对象成员的值
作用:防止忘记初始化
特点:(1)函数名和类名相同(2)没有返回值(3)可以重载(4)自动调用

五、析构函数—释放对象成员所分配的内存空间
特点:函数名是类名;无参;不可重载;没有返回值。
当对象被释放,会调用析构函数
引入目的:防止内存泄漏。

C语言 void 万能指针:接收任何类型指针的值

//C++新类型转换运算符
#include <iostream>
using namespace std;
int main()
{
    //C语言:隐式类型转换(char/int/long/float/double)  强制类型转换
    //不安全:任何类型都可以互相转换,不做类型检查
#if 0
    int num = 5;
    double b = num;//隐式类型转换
    num = 'a';
    int *p = &num;
    char *ptr = (char *)p;//强制类型转换    ptr是char类型的指针  p是整型的指针
 #endif    
    
    //引入1:static_cast:相关类型转化;void *和其他类型指针之间的转化  父类和子类之间转换
    //方法如下:
    int num = 5;
    double b = static_cast<double>(num);
    char ch = static_cast<char>(num);
   
    int *p_num = &num;
    void *p = p_num; //void *万能指针:接收任何类型指针的值
    //C语言 char *ptr = (char *)p;
    char *ptr = static_cast<char *>(p);//C++
     
     //引入2:reinterpret_cast:可以将任意类型指针做转换,类似与C的强制类型转换 (不安全)
    //ptr = static_cast<char *>(p_num); static_cast转换不了
    ptr = reinterpret_cast<char *>(p_num);

    //引入3:const_cast:去除指针和引用的const属性;  
    const int count = 5;
    //int a = count;
    int count1 = 6;
    const int *p_count = &count;//const指针必须对应const变量

    int *p_count1 = const_cast<int *>(p_count);//引入3的应用

    *p_count1 = 7;//修改count值
   
    const int &r_count = count;
    int &r_count2 = const_cast<int &>(r_count); 

    //引入4:dynamic_cast: 多态
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值