当前位置: 首页 > web >正文

c++复习(类型准换+动态数组+类与对象)

一:类型转换+动态数组

c++新增的有关于内存动态管理的运算符
new与malloc功能相似,用于在程序运行过程中根据需要申请连续内存空间
new 申请内存时知道类型的,而且也可以初始化
--------------------------------------------------------
new与delete
--------------------------------
int *p = new int;
int *pa = new int[n];//n是个数
--------------------------------

delete释放内存空间
delete 指针名,释放当个变量的内存空间
delete[]指针名,释放数组的内存空间

========================================================
强制类型转换
-------------------------------
将表达式的值强制类型转换得到()中的类型值类型表达式

//static_cast<type>(expression)  基本类型之间转换(最常用)

//reinterpret_cast<type>(expression)
reinterpret_cast通常为操作数的位模式提供较底层的重新解释,重新解释指的是将二进制数据重新解释。expression只能是指针或引用

//const_cast<type>(expression)
const_cast<>用于移除const对象的引用或指针具有的常量性质,可以去除const对引用和指针的限定,const_cast<>只能用于转换指针或引用。

//dynamic_cast<type>(expression)
dynamic_cast<>用于运行时检查类型转换是否安全,可以在运行期间确定类型,如类的指针、类的引用和void*。
eg1:一动态数组初始化

#include <iostream>
using namespace std;int main() {int n;cout << "请输入数组长度 n:";cin >> n;// 第一种:new int[n] {1, 2, 3} —— 使用大括号初始化前几个,剩下为 0int* arr1 = new int[n]{1, 2, 3};// 第二种:new int[n]() —— 使用小括号初始化,所有元素为 0int* arr2 = new int[n]();// 第三种:new int[n] —— 没有括号,值为随机(未初始化)int* arr3 = new int[n];cout << "\narr1 (使用 {} 初始化): ";for (int i = 0; i < n; ++i) {cout << arr1[i] << " ";}
//这个方法是最安全的--也就是第2种cout << "\narr2 (使用 () 初始化): ";for (int i = 0; i < n; ++i) {cout << arr2[i] << " ";}cout << "\narr3 (未初始化): ";for (int i = 0; i < n; ++i) {cout << arr3[i] << " ";}// 释放内存delete[] arr1;delete[] arr2;delete[] arr3;return 0;
}

eg2:类型转换

#include<iostream>
using namespace std;int main()
{int intVal;float floatVal;//用户输入cout << "请输入一个整数";cin >> intVal;cout << "请输入一个浮点数...";cin >> floatVal;//强制类型转换float intToFloat = static_cast<float>(intVal);int FloatToint = static_cast<int>(floatVal);//求和float sumAsFloat = intToFloat + FloatToint;int sumAsInt = static_cast<int>(sumAsFloat);//输出结果cout << "\n将整数" << intVal << "转换为浮点数后为:" << intToFloat << endl;cout << "将浮点数" << floatVal << "转换为整数后为:" << FloatToint << endl;cout << "\n转换后两数之和(浮点数形式)为:" << sumAsFloat << endl;cout << "转换后两数之和(整数形式)为:" << sumAsInt << endl;return 0;
}

//reinterpret_cast

//reinterpret_cast 将整数的地址强制转换为char*,逐字节查看内存中的存储内容,这个方式便可以直观的
//观察出 整数是如何在内存中存储的#include<iostream>
using namespace std;int main()
{int num = 305419896;cout << "整数num的值为:" << num << endl;//使用reinterpret_cast把整数地址转换为字符指针char* ptr = reinterpret_cast<char*>(&num);cout << "该整数在内存中存储的字节为" << endl;for(int i = 0;i < sizeof(int);++i){printf("Byte %d:0x%02X\n",i,static_cast<unsigned char>(ptr[i]));}return 0;
}
#include<iostream>
using namespace std;int main()
{char ch;int num;//输入一个字符cout << "请输入一个字符" ;cin >> ch;//输入一个整数cout << "请输入一个整数(0-127)";cin >> num;//强制类型转换int asciiValue = static_cast<int>(ch);char convertedChar = static_cast<char>(num);//输出转换结果cout << "\n字符" << ch << "ascII" << asciiValue << endl;cout << "整数" << num << "对应的字符" << convertedChar << endl;return 0;}

-----------------------------
面向对象的基本概念
-----------------------------
面向过程程序设计:就是把问题分解为函数fuction功能、过程
面向对象是另外一种分解问题的角度,对象object
-----------------------------
对象就是现实生活中的各种物品,是一个对象具有不同的特征,这些特征在程序里面就是属性,同时具有行为就是方法

类:就是把所有同类的对象集合起来抽象出共同的特征和行为,进而形成类,这里的抽象就是把不同的对象属性值去掉,指保留属性
类与对象的实例就是抽象与实例的关系,类是对对象的抽象,对象是类的实例

-----------------------------
封装:就是隐藏不需要外界知道的信息,留出外界操作的接口。
-----------------------------
继承:继承主要是强调子类自动拥有父类的数据和方法
-----------------------------
多态:指同一个方法在不同的对象上有不同的表现虽然都是 “计算面积” 这个方法,但在不同的图形对象上表现不同,这就是多态
-----------------------------

成员函数

#include<iostream>
using namespace std;class Student
{
public:void study(); //成员函数声明void exam();string name;int age;
};void Student :: study()
{cout << name << "在学习" << endl;
}void Student :: exam()
{cout << name << "要考试" << endl;
}int main()
{Student stu;Student stu2;stu.name = "小米";stu2.name = "小红";stu.study();stu2.exam();return 0;
}

set与get使用方式

#include<iostream>
using namespace std;class Student
{
public:void study();void exam();void setName(string name){_name = name;}void setAge(int age){if(age < 0 || age > 150){cout << "年龄不合法" << endl;_age = 18;return;}_age = age;}string getName(){return _name;}int getAge(){return _age;}
private:
string _name;
int _age;
};void Student :: study()
{cout << _name << "在学习" << endl;
}
void Student :: exam()
{cout << _name << "在考试" << endl;
}
int main()
{Student stu;Student stu2;stu.setName("小明");stu2.setName("小红");stu.study();stu.exam();stu.setAge(30);cout << "姓名" << stu.getName() << ", 年龄" << stu.getAge() << endl;return 0;
}

封装的体现--教师系统

#include<iostream>
#include<string>
using namespace std;class Teacher{
public:
void inputInfo(){cout << "请输入教师姓名:";cin >> name;cout << "请输入教师年龄:";cin >> age;cout << "请输入教师职称";cin >> title;
}
//请输入个人信息
void displayInfo(){cout << "教师信息" << endl;cout << "姓名" << name << endl;cout << "年龄" << age << endl;cout << "职称" << title << endl;
}
//上课
void teach(){cout << name << " 在上课。" << endl;
}
//批改作业
void correctHomework(){cout << name << " 在批改作业" << endl;
}
private:string name;   // 姓名int age;       // 年龄string title;  // 职称
};
int main() {Teacher t;t.inputInfo();         // 键盘输入个人信息t.displayInfo();       // 显示器输出个人信息t.teach();             // 上课t.correctHomework();   // 批改作业return 0;
}

员工类操作

#include <iostream>
using namespace std;class Employee 
{
public:void setEmployeeId(int eid);void setName(string _name);void setSalary(double _salary);void increaseSalary(double rate);void displayDetails();
private:int employeeId;string name;double salary;
};void Employee::setEmployeeId(int eid)
{employeeId = eid;
}void Employee::setName(string _name)
{name = _name;
}void Employee::setSalary(double _salary)
{salary = _salary;
}void Employee::increaseSalary(double rate)
{salary *= 1 + rate;
}void Employee::displayDetails()
{cout << employeeId << ", " << name << ", " << salary << endl;
}int main()
{Employee e;e.setEmployeeId(101);e.setName("李四");e.setSalary(8000);e.increaseSalary(0.15);e.displayDetails();return 0;
}

http://www.xdnf.cn/news/9296.html

相关文章:

  • 三十、面向对象底层逻辑-SpringMVC九大组件之HandlerInterceptor接口设计
  • 大模型的开发应用(四):深度学习模型量化与QLoRA微调
  • WPF【11_3】WPF实战-重构与美化(可复用的UI组件)
  • 编写第一个ros程序
  • 【Python训练营打卡】day37 @浙大疏锦行
  • 吉林省CCPC与全国邀请赛(东北地区赛)游记
  • 把 CURSOR 的工具活动栏改成和 VSCODE 一样的左侧展示
  • 防爆手机VS普通手机,区别在哪里?
  • Python实例题:使用Python定制词云
  • 基于深度学习的语音识别系统设计与实现
  • OpenCV CUDA模块图像处理------颜色空间处理之用于执行伽马校正(Gamma Correction)函数gammaCorrection()
  • Jenkins分配对应项目权限与用户管理
  • Linux中的常用命令
  • JSON全面解析
  • Qt基础终结篇:从文件操作到多线程异步UI,深度解析核心要点
  • -资产收集篇FridaHOOKXposed证书提取单向双向检验抓包
  • Logi鼠标切换桌面失效
  • ubuntu2x.xx网络不通如何解决
  • 《计算机组成原理》第 9 章 - 控制单元的功能
  • 光电赋能低空场景,灵途科技助力无人机持续升级
  • 红黑树,B树,二叉树之间的不同
  • 【监控】Prometheus中的告警机制介绍
  • 异常:UnsupportedOperationException: null
  • 【Java开发日记】说一说序列化与反序列化中存在的问题
  • 前端 reconnecting-websocket 包
  • 【AI工具应用】使用 trae 实现 word 转成 html
  • 实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.4 R语言解题
  • Python训练打卡Day35
  • vLLM 核心技术 PagedAttention 原理详解
  • SLOT:测试时样本专属语言模型优化,让大模型推理更精准!