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

C++ 学习笔记day1

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

C++ 学习笔记day1

目录

前言

一、环境安装

1.1 Linux安装

1.2 QT环境安装

1.3 工程简介

二、标准输入输出、命名空间

2.1 标准输入流、输出流对象

2.2 系统自带、自定义、匿名命名空间

三、C++与C比较

3.1 字符串处理函数

3.2 bool类型

四、引用与动态内存分配

4.1 引用(常引用) 与指针

4.2 new与malloc比较

4.3 重载 默认参数

五、类的初步

5.1 定义、创建、调用

5.2 堆、栈空间

5.3 访问权限、封装性 、分文件定义类

总结



前言

本篇文章主要总结了,c++的环境安装、配置;标准输入输出、命名空间的不同情况;同时初步比较了C语言与C++的区别;引用和动态内存分配、类的初步认知(定义、创建、调用);面向对象的3大特性之一的封装性,函数的分文件定义与实现


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境安装

1.1 Linux安装
g++编译器编译C++代码,不能使用gcc

在用户目录中单独创建一个文件夹存放下载后的3个安装文件,然后进入到目录中执行下面命令
	//cd 到放的目录下  例:cd  ~/Desktop
	sudo  dpkg  -i  *.deb        命令安装
	sudo apt  -get  install  g++    在线安装
sudo apt  -get  remove  g++	卸载之前的版本

***拖拽虚拟机失败******
	解决办法:
		虚拟机设置共享文件夹
		管理 --》虚拟机设置 --》选项 --》添加共享文件夹 如:c++-soft 

1.2 QT环境安装
注意:路径不能有中文

IDE  集成开发环境
QTCreator   eclipse   vs
在IDE中写代码,首先创建项目

QTCreator会对整个项目中的所有文件进行编译!!!!!

中文乱码:
解决方式,工具--》选项--》文本编辑器 行为--》默认编码 改为System,然后重启Qt即可。

1.3 工程简介

1、新建项目

2、运行项目

二、标准输入输出、命名空间

2.1 标准输入流、输出流对象
#include   //流  数据流 从A点移动到B点,以字节或者字符为单位移动
int main()
{
//在这里<<不是移位的运算,被重新赋予了新的含义,就是把右边的内容放到输出流对象里。
	std::cout<<" hello world !"<     输入输出头文件
std   命名空间 //c++所有的类和对象的名字都是std的命名空间,避免命名空间污染			  

cout  输出流            格式:	cout<<数据 
<<    输出流运算符 	    endl 换行 n end line
::    c++才有的运算符   作用域限定符
cin  输入流            无法输入空格  如果输入有空格 只拿到空格之前的
>>    运算符重载,指向了数据流的方向

输入输出流都可自动识别内置类型,较C语言比较方便  

cin可获取多个输入,每次遇到空格停止
getline输入字符串  读入一行的字符串,包括空格,遇到'n'结束输入  

2.2 系统自带、自定义、匿名命名空间
命名空间作用:避免命名空间污染(避免同名冲突)
注意:C++语言只有一个命名空间std,C++定义的所有的类和对象都是std这个命名空间下的命名的

类型一:系统标准命名空间std
方法一:整体声明,打开命名空间    using namespace std;
方法二:只声明要使用的           using std::cout;  using std::cin;

类型二:自定义命名空间
定义:namespace + 命名空间的名字
例如:
namespace teacher  //1.定义命名空间 teacher
{
	char name[20] = "小明";	
}
using namespace teacher;

使用方法和标准命名空间调用方法相同

命名空间冲突,即访问不明确的情况
1.两个命名空间定义了同一个变量时,造成访问不明确,所以必须规范使用 命名空间 ::变量名
2.命名空间于调用者内部变量产生冲突,则优先使用内部变量
3.全局变量和空间中变量冲突时,全局变量被放到匿名命名空间中  ::变量名
int a = 10;
int main()
{
	int a = 20;
	cout<

三、C++与C比较

C面向过程   C++面向对象

1) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,
使用的时候一个一个依次调用就可以了。 
2) 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙	某个事物在整个解决问题的步骤中的行为。

3.1 字符串处理函数
   1、c 用字符数组存储 用字符指针操作 
C语言字符串的两个要素:1. ''结尾   2. 字符类型的地址 //首地址
   2、c++  标准库中string类 (string不是基本类型,是类类型、对象类型)

C++的字符串处理函数
(1)需要加头文件#include
    string是C++的头文件,不是C语言的头文件,和string.h不是一回事
	
(2)需要加std命名空间  using namespace std;

(3)赋值 连接 拷贝  比较 与算数运算符使用即可实现字符串处理功能
#include 
#include 
using namespace std;

int main()
{
	string s1 = "hello world"; //s1是string类型的对象,用字符串”hello world”初始化
	string s2("hello farsight");//s2是string类型的对象,用字符串”hello farsight”初始化
	string s3(s2);//s3是用s2复制的string类型对象
	string s4 = s3;//s4是用s3复制的string类型对象
		
	cout< <= >=  返回值为bool类型 真true 假false
}

其他成员函数:empty() 和 size()  
empty()  判断空,如果字符串是空,返回true
size()    返回字符串长度,算法和strlen是一样的。 

风格类型转换:
(1) c风格转为c++风格 	     string s = "abvc";

(2) 将string转换成C风格字符串  c_str()函数:是将c++字符串s1转换为c风格字符串 char*

C++推荐我们使用string字符串,但是有些时候api的参数需要我们使用C风格字符串char* 类型的参数,这时候需要我们将string转换成C风格字符串。

3.2 bool类型
1、bool是基本数据类型(内置类型(基本数据类型),不需要声明就能使用的类型),用来表示逻辑真假。
2、C++依然可以使用0和非0表示真假,但C++增加bool类型专门表示真假true false

优点::bool类型能够增强程序可读性
bool类型所占类型数:至少1字节     boolalpha  字母形式输出  true
                                noboolalpha解除字母形式输出,换为数字形式输出

四、引用与动态内存分配

4.1 引用(常引用) 与指针
引用:是c++对c的重要扩充,引用符号:&  使用数据类型加引用符号&,声明引用。
引用变量是某个已存在变量的另一个名字 本质上是同一个变量,扩充作用域
引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能

 引用的特点:
 * 		1.引用必须进行初始化,不可以单独的存在 int& b;错误的
 * 		2.引用不可以改变指向
 * 		3.普通的引用,不可以用常量或者临时值进行初始化  常引用可以(const)
 *
 引用和指针的区别:
1. 不存在空引用,引用必须连接到一块合法的内存;指针可以是空指针。
2. 一旦引用被初始化为一个对象,就不能被指向到另一个对象;指针可以在任何时候指向到另一个对象。  
3. 引用必须在创建时被初始化;指针可以在任何时间被赋值。

引用可为参数、返回值 :
引用作为返回值,是返回变量本身,而不是一个临时的值,要保证变量的生命周期足够长。

const修饰的引用:常引用  做形参(作用:保护原变量,不被修改)
const 常量化 声明变量时,程序便不能再对它进行修改,即限定一个变量不允许被改变

const 与define的比较:
1、宏常量有数据类型,而const常量没有数据类型
2、有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试
3、编译器可以对const进行类型安全检查。而对#define只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

4.2 new与malloc比较
不同的内存空间对变量的生命周期管理不同。
1.堆: 自定义生命周期  只申请不释放堆空间内存,内存泄漏。
2.栈: 作用域结束,变量就释放。
3.静态: 程序结束才释放。

c中   函数            malloc-free   malloc申请的内存空间是没有类型的void* 不会初始化 
c++中 关键字(运算符) new -delete 	new申请的内存空间是有类型的        给内存初始化

总结:new 与malloc的比较
1、malloc是库函数  new是关键字(运算符)
2、malloc申请的空间没有类型,需要强转   new根据指定类型申请并返回对应的指针类型

4.3 重载 默认参数
重载:在同一个类对象中,函数名相同,参数不同(参数类型、参数个数)满足一个即可

函数默认参数:
1、默认参数的顺序:形参列表只能从右侧开始有默认值,依次默认 
2、加入默认值后:实参可以选择 传值或者不传值
3、当函数的声明和定义分开写的时候,只能在声明的部分写默认参数

五、类的初步

5.1 定义、创建、调用
1.定义类 :类class是以struct为基础,扩充而来
class + 类名
{
public:公有
};

2.创建类实例对象
	类名 对象名; 
3.调用类成员
	对象名.属性;
	对象名.函数(); 

5.2 堆、栈空间
//栈空间创建对象
int main()
{
	//2.栈空间 创建(实例化)类对象
	Person p;	
	//3.调用类成员  进行赋值
	//p.name = "小明";
	
	//4.调用成员函数 进行赋值
	p.setName("小明");
	//cout<setName("小明");
	p->setAge(18);
	p->print();
	delete p;//删除对象
}

5.3 访问权限、封装性 、分文件定义类
class与struct的比较:
1、class 默认访问权限是私有的private的 struct默认是public的
2、class 有3种访问权限 public private protect  struct只有一种

封装:函数封装 类封装  高内聚 低耦合
当一个函数太大的时候,函数本身一定可以再拆分成若干个小函数
当一个类太大的时候,要将他的相关功能的成员变量和成员函数拆分成若干个小类。

分文件定义类:将一个功能的声明、实现、函数调用分成不同的文件,提高可读性

 

总结

主要总结了,c++的环境安装、配置;标准输入输出、命名空间的不同情况;同时初步比较了C语言与C++的区别;引用和动态内存分配、类的初步认知(定义、创建、调用);面向对象的3大特性之一的封装性,函数的分文件定义与实现

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

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

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