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

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;
}

相关文章:

  • 第一章 LVS 负载均衡群集核心概念与体系架构
  • Vue3进阶教程:1.初次了解vue
  • 论文阅读笔记——Step1X-Edit: A Practical Framework for General Image Editing
  • python学习day30
  • 《100天精通Python——基础篇 2025 第21天:多线程性能剖析与 GIL 深入解析》
  • java集成Swagger2
  • 人工智能与机器学习从理论、技术与实践的多维对比
  • java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节
  • 【洛谷P9303题解】AC代码- [CCC 2023 J5] CCC Word Hunt
  • 如何合理选择智能外呼机器人:多维评估
  • PDF处理控件Aspose.PDF教程:压缩 PDF 文档的完整指南
  • ubuntu20.04安装CUDA、Cudnn
  • 【】20250527PDF文件拆分成多个pdf(两页一份,用幼儿班级姓名命名文件)
  • 速通《Sklearn 与 TensorFlow 机器学习实用指南》
  • [Windows] 视频配音:Krillin AI v1.1.4
  • 如何使用PHP创建一个安全的用户注册表单,包含输入验证、数据过滤和结果反馈教程。
  • Android Cameara2 + MediaRecorder 完成录像功能
  • 如何构建一个高效的 iOS 应用日志体系?从开发调试到使用KeyMob上线排查的实践经验
  • iOS QQ抽屉式导航的实现
  • Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
  • 建设vip视频解析网站违法吗/网站优化网站优化
  • dw设计试图做网站/山东济南最新消息
  • 成都网站建设服务/品牌如何推广
  • 做电影分享网站违法吗/网站托管服务商
  • 品牌推广网站如何做/泉州seo按天收费
  • 称多县网站建设公司/搜狗网址导航