栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

与C++的再邂逅

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

与C++的再邂逅

 C++与C的区别

1结构体区别

1.1:类型不再使用struct关键字,直接用结构体名即可

1.2:C++结构体中允许函数的存在

      1.2.1在结构体中声明,在结构体或者内外实现

      1.2.2结构体中函数访问数据,可以直接访问

      1.2.3学会调用,和数据成员方式一样

               对象(结构体变量).成员

               对象指针->成员

              (*对象指针).成员

    C++在没有写构造函数和权限限定时,用法和C语言的用法是一样的

#include 
using namespace std;//命名空间的使用

struct  student
{
	char name[10];//在C++中把数据叫做属性,特征,结构体中的数据成员
	int age;
	float score;
	void print()//在C++中把函数叫做行为,结构体中成员函数
	{
		cout << name << "t" << age << score << endl;
	}
};
void student::print()//在外部调用,用到结构体名限定,标明函数来自哪里
{

}
//结构体中的变量必须要通过结构体变量访问
//C++结构体中的函数访问属性,可以直接反访问
int main()
{
	struct student A = { "哈皮",18,99 };//A就是一个对象
	student B = { "嗨皮",18,99 };
	A.print();//数据的几种访问形式
	(&B)->age;
	student* p = &A;
	p->name;
	return 0;
}

2动态内存申请

         让我们先回顾一下C语言的动态内存申请吧 

          malloc 不带初始化      calloc 带初始化  realloc重新申请    free释放内存

2.1C++的动态内存申请

          new(申请)delet(释放)

          单个变量内存申请    数组的动态申请     结构体内存申请

#include 
using namespace std;//命名空间的使用

void testoneMenory()//单个变量内存申请
{
	//申请内存不做初始化
	int* pInt = new int;//new的使用
	*pInt = 999;
	cout << *pInt << endl;
	char* pChar = new char;//new的使用
	*pChar = 'A';
	cout << *pChar << endl;
	//申请内存做初始化
	int* pNum = new int(999);//加个小括号就行啦
	cout << *pNum<< endl;

	delete pInt;//有申请就有释放,大家不要忘了释放内存哦
	pInt = nullptr;
	delete pChar;//delete的使用
	pChar = nullptr;
	delete pNum;//delete的使用
	pNum = nullptr;
}
void testArrayMemory()//数组的动态申请
{
	//一维数组
	//不带初始化
	int* pInt = new int[3];
	char* pInt1 = new char[15];
	cout << pInt << endl;
	//带初始化
	int* pNum = new int[3]{ 1,2,3 };
	for (int i = 0; i < 3; i++)
	{
		cout << pNum[i] << " ";
	}
	cout << endl;
	char* str = new char[20]{ 'a','A','M','' };
	cout << str << endl;
	str = new char[20]{ "hhhhhh" };

	delete[]pInt;//注意这里的内存释放要加[]表明是一段内存
	pInt = nullptr;
	delete[]pInt1;//数组的释放不管几维数组只加一个[]
	pInt1 = nullptr;
	delete[]pNum;
	pNum = nullptr;
	delete[]str;
	str = nullptr;
}

struct  student
{
	char name[10];//在C++中把数据叫做属性,特征,结构体中的数据成员
	int age;
	float score;
	void print()//在C++中把函数叫做行为,结构体中成员函数
	{
		cout << name << "t" << age << score << endl;
	}
};


void testStructMemory()//结构体动态内存申请
{
	//先new一个对象
	int* p = new int(23);
	//结构体用大括号初始化
	student* pA = new student{ "嗨皮",18,99 };
	pA->print();

	delete[]pA;
	pA = nullptr;
}

3内存池

萌新是这样理解的:先申请一段大内存,再在大内存中一小段一小段用,最后只释放大内存就好啦

#include 
using namespace std;//命名空间的使用
//内存池,允许申请一段内存,供程序使用,综合管理内存
//malloc内存是在堆区
//new内存是自由存储区

void testMemory()
{
	char* memorySum = new char[1024];
	int* pNum = new(memorySum) int[3]{ 1,2,3 };
	char* pStr = new(memorySum + 3 * 4) char[20]{ "hhhhhh" };
	//上一行与下一行等效,下一行是指针的偏移
	char* pStr = new(pNum + 3) char[20]{ "hhhhhh" };
	cout << (memorySum + 3 * 4) << endl;

	delete memorySum;
	memorySum = nullptr;
}

4string类型

4.1string创建    带初始化  不带初始化  通过另一个字符串创建

#include 
#include //包含头文件
using namespace std;//命名空间的使用

void createString()
{
	string str1;//不带初始化
	str1 = "hhhhhh";
	cout << str1 << endl;

	string str2("hhhhhh");//带初始化
	string str3 = "hhhhhhhh";
	cout << str2 << str3 << endl;

	string str4(str3);//通过另一个字符串创建str4=str3
	cout << str4;
}

4.2string基本操作  拷贝  赋值  连接  比较 

4.3C++string与C语言string.h

void operateString()
{
	string str1 = "hhh";//赋值
	string str2 = "lll";
	string str3 = str1 + str2;//连接
	if (str1 == str2) {//比较
		cout << "这两个字符串不相同" << endl;
	}
	//用printf输出
	printf("%sn", str1.c_str());
	printf("%sn", str1.data());
	//to_string()用法
	str2 = to_string(9999);//把数字转换为字符串
	cout << str2 << endl;
}
void exOpeartor()
{
	string str = "Long time no see";
	for (int i = 0; i < 8; i++)
	{
		cout << str[i];
	}
	cout << "str的长度:" << str.size() << endl;
	//str.capacity()str的容量
}

二维数组的动态内存申请,采用子函数的方式为二级指针申请内存并释放内存:

作业:

#include 
using namespace std;//命名空间的使用

int** homework(int X,int Y)
{
	int** p = new int*[X];
	for (int i = 0; i < X; i++) {
		 p[i] = new int[Y];
	}
	
	return p;
}
int main()
{
	int** M = homework(2, 3);
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 3; j++) {
			M[i][j] = i * j;
			cout << M[i][j] << "  ";
		}
	}
	return 0;
}

输出结果:

0  0  0  0  1  2
C:Users86137sourcereposC++DebugC++.exe (进程 15132)已退出,代码为 0。
按任意键关闭此窗口. . .

好啦,就先到这里啦。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/510523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号