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 <iostream>  //流  数据流 从A点移动到B点,以字节或者字符为单位移动
int main()
{
//在这里<<不是移位的运算,被重新赋予了新的含义,就是把右边的内容放到输出流对象里。
	std::cout<<" hello world !"<<std::endl;   //等价于printf(“hello world\n”);
return 0;
}

编译:g++ test.cpp -o test
运行:./test

程序解释:
#include<iostream>     输入输出头文件
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<<a<<endl;  //20
cout<<::a<<endl;   //10  通过匿名对象方式访问全局变量
	return 0;
}

三、C++与C比较

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

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

3.1 字符串处理函数

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

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

(3)赋值 连接 拷贝  比较 与算数运算符使用即可实现字符串处理功能
#include <iostream>
#include <string>
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<<s1<<endl;//hello word
	cout<<s2<<endl;//hello farsight
	cout<<s3<<endl;//hello farsight
	cout<<s4<<endl;// hello farsight
    
    s4 +=s3;//拼接、连接  
    //注意:只接受string,如果需要拼接其他类型,只能使用sprintf()进行复杂的字符串格式化
    
    cout<<s4<<endl;//hello farsighthello farsight
    s4 ==s3;//比较  使用关系运算符 == != < > <= >=  返回值为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<<p.name<<endl;
	p.show();
}
//堆空间创建对象
int main()
{
	Student* p = new Student();//在堆空间创建一个Student类型的对象
	p->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大特性之一的封装性,函数的分文件定义与实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值