**参考bilibili视频av29504365**

### 一段简单的程序Hello World
```
#include <iostream>
using namespace std;
int main(){
cout<<"hello world"<<endl;
system("pause");
return 0;
}
```
### 注释
- 单行注释//
- 多行注释/**/
- #if 0 #end if
快捷键
Ctrl K C 快速注释
Ctrl K U 取消注释

### main
```
int main(){
//一般写法
return 0;
}
```
```
int main(void){
//标准写法
return 0;
}
```
```
int main(int argc,char* argv[]){
//需要使用命令行
return 0;
}
```
```
main(){
//仅限C语言可以
}
```
```
void main(){
//C Premiere Plus书中不建议这样写
}
```

### 头文件
```
#include <iosteam>//新版推荐
```
```
#include <iosteam.h>//c++早期,vs不可以编译
```
### cincout
```
cout<<""<<"";
```
```
cin>>c
```
- 1.连续输出
- 2.自动识别类型

### endl
```
cout<<""<<endl;
```
换行符,并且清空缓冲区
```
cout<<""<<"\n"
```
仅换行

### namespace
C语言中不能出现一样的函数,但是C++中同一个namespace不能出现一样函数

```
#include <iostream>
using namespace std;
namespace stu{
void print(){
cout<<"im stu"<<endl;
}
}
namespace tea{
void print(){
cout<<"im tea"<<endl;
}
}
int main(){
stu::print();
tea::print();
system("pause");
return 0;
}
如果同时using了stu和tea的命名空间并调用print函数,会报错,不知道应该调用哪个命名空间的print函数
```
在std命名空间中有C++常用的函数
```
using std::cout;
```
可以打开某一个函数
```
std::cout<<"";
```
不打卡也可以直接调用

### struct

```
struct Node{
int n;
};
int main(){
Node n;//C++结构体不用加struct
n.n=4;
return 0;
}
```
```
struct Node{
int n;
};
int main(){
struct Node n;//C语言需要加
n.n=4;
return 0;
}
```
```
typedef struct Node{//C语言中要想不加,需要加typedef
int n;
}Node;
int main(){
Node n;
n.n=4;
return 0;
}
```
**C语言拓展:函数指针**
```
#include <stdio.h>

struct Node{
int m;
void (*P)();
};
void fun(){
printf("fun");
}
int main(void){
struct Node a={1,fun};
a.P();
return 0;
}
```
### new delete 内存申请与释放
```
int *p=(int*)malloc(sizeof(int));
int *p1=new int;
int *p2=new int(11);//申请并且初始化
free(p);
```
空间申请
```
delete p1;//delete+指针
```
**区别**
C语言中malloc和free进行申请内存和释放,而C++中使用new和delete进行申请和释放
本质上区别不大,如果涉及到类,必须使用new和delete进行申请和释放

### 基本类型的引用
```
举例
int main(){
int a=5;
int c1=a;//传值
c1=6;//a不变
int &c2=a;//声明变量a的一个引用,c是a的一个别名,不是取地址符号
c2=7;//a会改变
int *p=&a;//&表示取地址
system("pause");
return 0;
}
```
### 其他类型的引用
**数组的引用**

```
int arr[10];
int (&p)[10]=arr;
```
**二维数组的引用**
```
int arr[10][10];
int (&p)[10][10]=arr;
```
**指针的引用**
```
int b=12;
int *point=&b;
int* &p3=point;
```

### 引用作参数

```
void swap(int& a,int& b){
int temp=a;
a=b;
b=temp;
}
```
实际还可以指针作参数交换

```
void swap(int* a,int* b){
int temp=*a;
*a=*b;
*b=temp;
}
```

### 引用作返回值
```
int& fun(){
int a=12;
return a;
}
int main(){
int& b=fun();
cout<<b<<endl;
//因为fun()执行完就释放了,所以b的引用是一块非法空间,编译器会警告
system("pause");
return 0;
}
```
**注意:引用做返回值,一定不能返回局部变量**

### 增强for循环
可以在for循环内部定义局部变量,i的作用域在循环体

```
int a[]={1,2,3,4,5,6,7};
for(int i=0;i<7;i++){
cout<<i<<endl;
}
for(int i=0;i<7;i++){
cout<<i<<endl;
}
```
vc6.0编译器以及C语言都是在for循环定义的i在全局有作用
```
int a[]={1,2,3,4,5,6,7};
for(int i=0;i<7;i++){
cout<<i<<endl;
}
for(i=0;i<7;i++){
cout<<i<<endl;
}
```

### 函数参数的缺省
```
void print(int a=10);
int main(){
print();
system("pause");
return 0;
}
void print(int a){
cout<<a<<endl;
}
```
在函数声明后可以进行参数缺省

### 函数的重载
```
void add(int a,int b);
void add(int a,int b,int c);
int main(){
add(1,2);
add(1,2,3);
system("pause");
return 0;
}
void add(int a,int b){
cout<<a+b<<endl;
}
void add(int a,int b,int c){
cout<<a+b+c<<endl;
}
```
函数名字相同,参数列表不同或者类型不同,与返回值无关

### 头文件重复包含问题
C语言中
```
#ifndef AAA
#define AAA
void fun();
#endif
```
C++中,也能实现同样的功能
```
#pragma once
void fun();
```
**注意**
pragma可能不适用于vc编译器

### 函数模板
```
template<typename T>
void fun(T a){
cout<<a<<enl;
}
int main(){
fun(‘a’);
system("pause");
return 0;
}
```
这样可以任意传参数

### 函数模板的具现化
```
struct Node
{
int a;
double b;
};
template<class T>
void fun(T a){
cout<<a<<endl;
}
template<> void fun<Node>(Node no){
cout<<no.a<<endl;
}
int main(){
Node node;
fun(no);
system("pause");
return 0;
}
```

### 类模板
```
template<typename T>
class father{
public:
int a;
father(T t){
a=t;
}
void show(){
cout<<a<<endl;
}
}
int main(){
father<int> pf;
system("pause");
return 0;
}
```
只对下面的类有效

### 继承模板
```
class son:public father<int>{

}
int main(){
son s;
system("pause");
return0;
}
```
### 多态的模板
```
int main(){
father<int> *pf=new son<int>;
pf->fun();
system("pause");
return 0;
}
```
### 类型是类的模板
```
father<Caa a> pf;
```

C++ 一周刷完C++基础课程(同C程序进行比较)的更多相关文章

  1. 学习笔记(一) HTML+CSS基础课程

    这个周把慕课网的<HTML+CSS基础课程>课程学完,内容都是非常非常基础的,不过还是学到了几个小知识点,记下来先. <a>超链接发送邮件 直接上把他的图片给挪过来了,我就不打 ...

  2. Coursera台大机器学习基础课程1

    Coursera台大机器学习基础课程学习笔记 -- 1 最近在跟台大的这个课程,觉得不错,想把学习笔记发出来跟大家分享下,有错误希望大家指正. 一 机器学习是什么? 感觉和 Tom M. Mitche ...

  3. PHP基础课程学习总结

    时间过得很快,不知不觉中过去了一个月,PHP基础课程已经学完了.休息这几天中,睡觉起来,整理下笔记,几天的假期又过去了,明天正式开始PHP的专业课程,新的征途又要开始了.开发整站时发现,过去整站做得太 ...

  4. C#基础课程之六(临时表)DataTable使用方法

    DataTable 用法:赋取值操作,及报错情况 dataTable.Columns.Add("Name"); //Columns 对象获取该集合的全部列,添加列名. 默认stri ...

  5. C#基础课程之五集合(HashTable,Dictionary)

    HashTable例子: #region HashTable #region Add Hashtable hashTable = new Hashtable(); Hashtable hashTabl ...

  6. C#基础课程之四集合(ArrayList、List<泛型>)

    list泛型的使用 ArrayList list = new ArrayList(); ArrayList list = ); //可变数组 list.Add("我"); //Ad ...

  7. C#基础课程之三循环语句

    for循环: ; i < ; i++) { Console.WriteLine("执行"+i+"次"); } while循环: while (true) ...

  8. C#基础课程之一注释和控制台、一些常识

    注释是程序员对代码的说明,以使程序具有可读性.源代码在编译的过程中,编译器会忽略其注释部分的内容. ()行注释 格式为:// 注释内容 用两个斜杠表示注释的开始,直到该行的结尾注释结束. ()块注释 ...

  9. 01_Python 基础课程安排

    Python 基础课程安排 目标 明确基础班课程内容 课程清单 序号 内容 目标 01 Linux 基础 让大家对 Ubuntu 的使用从很 陌生 达到 灵活操作 02 Python 基础 涵盖 Py ...

随机推荐

  1. SQL Server AlwaysOn原理简介

    SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例,数据库镜像和日志传送的单位是单个用户数据库,而A ...

  2. T84341 Jelly的难题1

    T84341 Jelly的难题1 题解 当窝发现窝的锅在读入这个矩阵的时候,窝..窝..窝.. 果然,一遇到和字符串有关的题就开始吹空调 好啦我们说说思路吧 BFS队列实现 拿出一个没有走过的点,扩展 ...

  3. 自定义view防支付成功页面

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...

  4. Python数据分析中Groupby用法之通过字典或Series进行分组

    在数据分析中有时候需要自己定义分组规则 这里简单介绍一下用一个字典实现分组 people=DataFrame( np.random.randn(5,5), columns=['a','b','c',' ...

  5. 第八章 SpringCloud之Feign、Hystrix结合使用

    #这个章节主要是针对Hystrix的使用,因为Feign的章节在上一节已经实现了,整个代码也是在上一个章节的基础上修改的 ##################Hystrix一个简单Demo实现#### ...

  6. 阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API

    分析aop的 xml 的代码.更直观一些 事务提交和回滚就是我们重复的代码 spring业余事务管理器,我们拿过来直接用就可以 提交和回滚的后面直接调用释放.所以释放资源之类就是多余的 在绑定连接到线 ...

  7. ATP检测 BAPI BAPI_MATERIAL_AVAILABILITY

    *****ATP检测        DATA: END_RLT LIKE EBAN-LFDAT,              NOT_AVAILABLE,              AVAILABLE( ...

  8. 教师表(TEACHER.DBF)

    20-27题使用的数据如表1和表2所示. 表1 教师表(TEACHER.DBF) 教师号 姓名 性别 籍贯 职称 年龄 工资/元 0001 王吉兵 男 江苏 讲师 27 2003.50 0002 张晓 ...

  9. 使用pthread下的mutex与cond_var模拟windows下的event几个接口

    两个版本的链接: https://github.com/neosmart/pevents https://github.com/moya-lang/Event 第一个版本能够模拟等待多个事件中的一个触 ...

  10. js脚本实现在该界面直接跳转到一个登录界面并且自动登录

    1:首先说明的是自动登录也是需要密码的,这是前一个网页传输过去的 2:这里我使用的是post提交表单的形式 <------------------------------------------ ...