第2节课:9.2:从c到c++的过渡

第2节课:9.2:从c到c++的过渡

一、new(是什么?怎么定义?怎么使用?)

1.知识点:

是一种运算符,用来向堆区申请内存;

2.使用:

1.可以在申请的内存并初始化

2.可以申请连续内存

3.一定要记得手动释放申请到的堆区内存

3.易错点

new之后没有释放堆申请到的内存,出现内存泄漏的情况

4.review

memset函数:可以给连续内存赋值

赋值方式:单个字节这样赋值

头文件:#include <string.h>

//parameter:要赋值的指针,赋值的内容,赋值的内存大小
memset(p2,1,sizeof(int)*10);//

一般new和delete成对出现

#include <stdio.h>

int main()
{
	int*p = new int;//开辟一个int四个字节大小的内存,没有给初值
	int *p1 = new int(10);//开辟一个四个字节,并赋给初值10
	int *p2 = new int[10];//开辟一个10个int大小的连续内存,为赋初值
    
	for (size_t i = 0; i < 10; i++)
	{
		p2[i] = i + 1;
	}
    
	for (size_t i = 0; i < 10; i++)
	{
		printf("%d\n",p2[i]);
	}
    
	printf("%d",*p1);
    
    //delete
	delete p;
	p = nullptr;
	delete p1;
	p1 = nullptr;
	delete[]p2;
	p2 = nullptr;
}

二、delete

1.知识点:

是一种运算符,用来删除堆区内存(不能用来删除栈区内存)

使用:

1.delte只能指向要delete的对象的首地址

2.delete后要置空指针

3.delete删除单个内存和多个内存的区别

4、delete是运算符

三、动态操作内存的常见错误

1.没有给指针指向的对象初始化就给指针赋值? .

????????????????

2.动态分配了内存但是没有初始化就解析引用

3.内存分配成功但是操作越界,可能指针修改了不该修改的地址里面的内容

4.delete指针后还对指针进行操作

5.内存泄漏

int*p = new int;//开辟一个int四个字节大小的内存,没有给初值
	*p = 10;
	delete p;
	*p = 20;
	printf("%d\n",*p);

四、c++中的命名空间(相当于一把锁)

1. 是什么:是一种作用域,用来避免命名污染的。把相同的名字都放到不同的空间里,来防止名字的冲突

2.定义:

1.成员可以在作用域外定义

2.在作用域内直接定义

3.使用方法:

要使用命名空间内的成员函数:

1.声明:using 命名空间名 :: 函数名;

2.指令:using (关键字)namespace 命名空间名;

namespace Myprintf
{
	void fun()
	{
		printf("可恶\n");
	}
}//作用域后不用加;while和if的{}都是作用域不是表示定义
//若是表示定义,例如struct和class 则要加;

namespace Mymath
{
    int Myadd(int a,int b);
}

int Mymath::Myadd(int a,int b)
{
    return a+b;
}

struct tag
{
	int a;
	int b;
};
using namespace Mymath;
using Myprintf::fun;

int main()
{
    fun();
    printf("%d\n",Myadd(1,2));
}
4.注意:

1.一般在.h文件中写命名空间的成员在.cpp文件中定义

(.cpp文件会被编译,.h文件不会背编译)

2.使用指令的方法则会使命名空间内的所由成员曝光

最好使用声明的方法

五、cout和cin和endl

1.是什么:是命名空间std内的函数

2.使用方法:

1.需要包含头文件

2.可以连续输入

#include <iostream>
using namespace std;

int main()
{
	int a, b, c;
	cin >> a >> b >> c;
	cout << "你是猪" <<endl<<a<<endl<<b<< endl<<c<<endl;
	return 0;
}

六、string类

1.是什么:c++一个类有很多操作符重载可以代替string函数简化code

2.使用:

1.包含头文件没有.h还有命名空间std的声明或者指令

#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
using namespace std;


int main()
{
	string str1 = "adga";
	string str2 = "sdg";
	string str = str1 + str2;
	printf("%s\n",str);//为什么输出有误,因为string是一个对象
	cout << str << endl;
	cout << str.length() << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值