**参考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. 安装源配置文件“/etc/apt/sources.list”问题

    安装docker过程中使用以下命令设置稳定存储库. $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker ...

  2. leetcode 105从前序与中序遍历序列构造二叉树

    方法一:直接使用复制的数据递归:O(n)时间,O(n)空间,不计算递归栈空间: /** * Definition for a binary tree node. * struct TreeNode { ...

  3. linux 下载jdk 、maven、git

    jdk: wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-secureback ...

  4. mysql登录的三种方式

    1.远程登录mysql 先授权:如:grant all on *.* to 'root'@'192.168.81.130' identified by '52033dd';查看是否生效:select ...

  5. 收货确定 BAPI BAPI_GOODSMVT_CREATE

    CLEAR gmhead.     gmhead-pstng_date = ls_table-gzdate."sy-datum .     gmhead-doc_date = sy-datu ...

  6. Activity 的 36 大难点,你会几个

    前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏. 本文中 ...

  7. DateTime相关

    1.string数据转成datetime DateTimeFormatter forPattern = DateTimeFormat.forPattern("yyyyMMddHH" ...

  8. Altera DDR2 IP核学习总结2-----------DDR2 IP核的生成

    打开IP核工具,然后选择Verilog HDL选项,填写路径,写入文件名DDR2_IP.V,点击next PLL reference clock frequency填入板子晶振的频率50MHZ,这里设 ...

  9. 小型自动化运维工具pssh和传输工具rsync

    一.简单介绍 1.pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括pssh ...

  10. 平衡树(fhq无旋treap)

    fhq板子(代码正确且风格易懂) 洛谷P3369 #include<iostream> #include<cstring> #include<cstdio> #in ...