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

C++第二次课:C++与C的区别二

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

C++第二次课:C++与C的区别二

 一:结构体的区别
#include
#include
using namespace std;
//类
struct MM{

	//属性,特征(数据成员)
	char name[20];
	int age;
	//行为,方法(成员函数)
	void print(){
		cout << name << "t" << age << endl;
	}
	void printData();//在结构体中声明,在外面实现
	//通过外部函数修改数据
	int& getAge(){
		return age;
	}
};
//在结构体外实现:用类名限定::
void MM::printData(){
	cout << name << "t" << age << endl;
}

int main(){
	//结构体中的函数,可以直接访问数据
	struct MM girl = { "小芳", 28 };
	MM mm = { "小丽", 24 };	//C++中不用写关键字struct
	//学会调用,与C语言访问数据成员的方式一样
	girl.print();			//访问方式1:对象(结构体变量).成员
	(&mm)-> printData();	//访问方式2:对象指针->成员
	//访问方式3:C中指针变量的写法
	MM* p = &mm;
	p->printData();
	//通过外部函数修改数据
	p->getAge() = 30;
	p->printData();
	p->age= 38;
	p->printData();
	//结构体数组
	MM arrat[3];

	while (1);
	return 0;
}

二:动态内存申请的区别 

 

#include
#include
using namespace std;

#if 0
//单个变量的动态内存申请
void oneMemory(){
	//不带初始化的申请
	int*pInt = new int;
	*pInt = 123;
	cout << *pInt << endl;
	char* pChar = new char;
	*pChar = 'A';
	cout << *pChar << endl;
	//带初始化的申请:加()给单个数据初始化
	int* pNum = new int(134);
	cout << *pNum << endl;
	//释放
	delete pInt;
	pInt = nullptr;
	delete pChar;
	pChar = nullptr;
	delete pNum;
	pNum = nullptr;
}
//数组的动态内存申请
void ArrayMemory(){
	//不带初始化
	int* pInt = new int[3];//等效产生了int pInt[3]的数组

	char* pstr = new char[15];
	strcpy_s(pstr, 15, "ILoveyou");
	cout << pstr << endl;
	delete[]pstr;
	pstr = nullptr;
#if 0//bug
	const char* pstr1 = new char[15];
	pstr1 = "ILoveyou";//这样写的话"ILoveyou"并没有在所申请的内存中,而是以常量的形式在常量区
	cout << pstr1 << endl;
	delete[]pstr1;
	pstr1 = nullptr;
#endif 

	//带初始化的 一堆数据用{}-->vs2013不能用{}初始化char
#if 0
	int*pNum = new int[3]{ 1, 2, 3 };
	for (int i = 0; i < 3; i++){
		cout << pNum[i] << " ";
	}
	cout << endl;
	delete[] pNum;
	pNum = nullptr;

	char* str = new char[20];//vs2013不支持char{ 'A', 'B', '' };
	cout << str << endl;
	delete[]str;
	str = nullptr;

	str = new char[20];//{ "ILoveyou" };
	cout << str << endl;
	delete[]str;
	str = nullptr;

	delete[] pInt;
	pInt = nullptr;
#endif
}
#endif // 0

// 结构体的动态内存申请
struct MM{
	char*name;
	int age;
	void printMM(){
		cout << name << "t" << age << endl;
	}
};
void structMemory(){
	int* p = new int(23);
	//同上面一样的申请方式
	MM* pMM = new MM;
	//结构体中指针要做二次申请,才能strcpy,或者赋值
	pMM->name = new char[20];
	strcpy_s(pMM->name, 20, "丽丝");
	pMM->age = 15;
	pMM->printMM();
	delete[]pMM->name;
	delete pMM;
}


int main(){
	//oneMemory();
	//ArrayMemory();
	structMemory();

	while (1);
	return 0;
}

三:内存池

 

#include
using namespace std;
//允许申请一段大内存,共给程序使用,综合管理内存
//malloc内存是在堆区
//new内存中在自由存储区
void testMwmory(){
	char* Sum = new char[1024];
	//下面所需要的内存都源于申请的1024字节
	//vs2013不支持用{}初始化char
	int*pNum = new(Sum) int[3]{1,2,3};	
	//new(申请内存的开始位置)...
	char*pstr = new(Sum + 12)char[20];	//char[20]{"ILoveuou"}
	for (int i = 0; i < 3; i++){
		cout << pNum[i] << " ";			//pNum等同于(int*)Sum
	}
	cout << endl << pstr << endl;		//pstr等同于(Sum+12)
	delete[]Sum;						//只用释放一次
	Sum = nullptr;
}
int main(){
	testMwmory();
	while (1);
	return 0;
}

四:string类型

 

#include	//注意不是
#include
#include	//同C语言的
#include
using namespace std;
//string创建
void creatString(){
	//不带初始化
	string str1;
	str1 = "ILvoeyou";
	cout << str1 << endl;

	//const修饰后不能修改
	const string cstr;
	//cstr = "IMissyou";//报错,常属性不能修改

	//带初始化:=或者()
	string str2("Iloveyou");
	cout << str2 << endl;
	string str3 = "IMissyou";
	cout << str3 << endl;

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

//string的基本操作
void operatorString(){
	//赋值:直接赋值 =
	string str1 = "A";
	string str2 = "600";
	string str3 = str2;
	cout << str3 << endl;
	//连接:用 + 连接,没有减法
	string str4 = str1 + str2;
	cout << str4 << endl;
	//比较:> < != == 直接比较即可
	if (str1 > str2){
		cout << "大:" << str1 << endl;
	}
	else{
		cout << "大:" << str2 << endl;
	}
}
//C++中string 与 C语言的string.h
void CppAndC(){
	//string在C++中是一个自定义类型(类),暂当结构体
	//string在C++中不能用C语言的字符串处理函数
	//那如何转换为C语言的char*呢?  用c_str() 或 data() 函数
	string str1 = "ILoveyou";
	printf("%sn", str1.c_str());
	printf("%sn", str1.data());
	//to_string:直接把数字转换为相应的字符串
	string str2 = to_string(1234);
	cout << str2 << endl;
}
void exOperator(){
	//采用下标法打印string
	string str = "IMissyou";
	for (int i = 0; i < 8; i++){//c++中string没有记录
		cout << str[i];
	}
	cout << endl;
	//其他函数操作
	//成金油函数:empty()  size()
	string mystring = "IMissyou";
	cout << mystring.size() << endl;
	string strEmpty;
	if (strEmpty.empty()){
		cout << "空" << endl;
	}
	//做了自动扩增处理
	char*str9 = new char[15];


}
int main(){
	creatString();
	operatorString();
	CppAndC();
	exOperator();
	while(1);
	return 0;
}
五:作业:二维数组的动态内存申请与释放
#include
#include
using namespace std;
//二维数组的动态内存申请
int**Arr2D(int row, int cols){
	int** pArr = new int*[row];
		if (pArr == nullptr)
			return nullptr;
		for (int i = 0; i < row; i++){
			pArr[i] = new int[cols];
		}
		return pArr;
		delete [] pArr;
		pArr = nullptr;
}
int main(){
	//5行3列
	int** p = Arr2D(5, 3);
	for (int i = 0; i < 5; i++){
		for(int j = 0; j < 3; j++){
			p[i][j] = i*j;
			cout << p[i][j] << "t";
		}
		cout << endl;
	}
	while(1);
	return 0;
}

 

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

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

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