C++学习笔记00----C++基础知识

初次写博客记录自己的C++学习之旅,算是自己的一个小笔记本吧!希望能坚持写下去,不断输出,提高自己。

C++简介

C++是C语言的扩展, 同时,

1.更加关注语言性能

与底层硬件紧密结合;程序员能对变量的生命周期做到精确控制;不需要为没有使用的语言特性付出代价如虚函数的使用;使用了语言特性不等于付出运行成本,因为有的被编译器提前编译好了的。(搞不懂没关系,只要知道C++很牛就行了)

2.引入了大量的特性,便于工程实现

三种编程范式:面向过程 面向对象 泛型编程

函数重载 异常处理 引用等。

C++最初是1998年开始 03年改进 11年引入了许多新特性,14、17、20对标准进一步迭代。但是C++11应用更加广泛吧。

00g++常见编译参数介绍

//-g 带调试信息的可执行文件

g++ -g test.cpp


//-O[n]优化代码
// -O0 不做优化      -O1  默认优化     -O2除了默认优化还有一些额外优化   -O3进一步优化

//注意优化后的代码 不能调式  一般在确认无误后使用优化  提高运行效率
g++ O2 test.cpp


//  -l 指定库文件     -L指定库文件路径

g++ -L/home/lib/mytestlib  -lmytest test.cpp
// 链接/home/lib/mytestli下的mytest.so库


//-I 指定头文件搜索目录

g++ -Imyinclude test.cpp


//-std=c++11  使用c++11标准

g++ -std=c++11 test.cpp

// -o  指定输出文件名

g++ test.cpp -0 test


// man gcc  可查看gcc文档
  

01C++的编译/链接

流程:预处理   编译  汇编   链接 

mkdir tmp
cd tmp
touch test.cpp
vim test.cpp

#include<iostream>
using namespace std;
int main()
{
	cout<<"This is a test!"<<endl;
	return 1;
}


1.预处理 Pro-processing  (将源文件和头文件变为翻译单元 源文件+头文件下相关文件-忽略的处理语句)
g++ -E test.cpp -o test.i

2.编译 Compilling  (将翻译单元变为汇编语言文件)
g++ -S test.i -o test.s 

3.汇编 Assembling   (将汇编文件转化为机器语言的目标文件)
g++ -C test.s -o test.o

4.链接 Linking    (链接多个文件  生成可执行文件)
g++ test.o -o test

具体每一步生成什么可以cat test.i 查看    -o 指定文件名
以上四步可一步代替  g++ test.cpp -o test  但必须明白它包含了四步操作。

预处理常见的问题 

预处理即将源文件和头文件转化为翻译单元的过程,所以就必须防止头文件的循环包含

// main.cpp
#include"swap1.h"

// swap1.h
#include"swap2.h"

//swap2.h
#include"swap1.h"

在main中 包含swap1  swap1包含swap2  swap2又包含swap1三者循环包含   编译报错

处理1

头文件加上#pragma once       (防止头文件重复包含)

#include<iostream>
#pragma once
#include"swap1.h"
int main()
{
.......
}

处理2

#ifndef SWAP2_H
#ifdef SWAP2_H
........
.......
#endif

持续更新,,,,,

02书写Hello World

#include<iostream>

int main(int argc ,char * argv[])
{
    std::cout<<"Hello world\n";
    return 0;
}

main特殊的函数  作为整个程序的入口
返回类型只能是int 通常用0来表示正常返回    可用  $?  查看返回值
such as:       g++ test.cpp -o main     ./main      $?

void func(const char * pInfo, int)
{
    cout<<pInfo;
    return ;

}

函数返回类型可以是void    return;  表示不返回值

函数名--用于函数的调用

形参列表--是函数接受的值  可以是空  可以是void (不常见)  可以无形参也可以是占位参数
such as : void fun(const char * info ,int )

03系统IO流

iostream  --标准库提供的IO接口   用于用户交互
输入流:cin--从键盘输入
输出流:cout---输出目标   cerr--刷新缓冲区   clog--不立即刷新缓冲区
std::flush  --缓冲区                  std::endl  --缓冲区刷新和换行   \n  --只换行
std::cout<<"I am Tim"<<endl;      ---刷新了缓冲区和换行
std::cout<<"I am Tim\n";           ---只换行


#include<iostream>     --系统从标准库中索引头文件
#include"head.h"       --系统从当前目录索引头文件   及用户自定义的头文件



namspace nn
{
    void func()
 {
    std::cout<<"hello nn\n";
 }

}

自定义命名空间  防止重复  有三种使用方法;
 
1.nn::func()   --推荐使用

2.using namspace nn
  func()

3. namespace ysq=nn;
   ysq::func()  

输出:

int x=9;

std::cout<<"I have"<<x<<"apples\n";

printf("I have %d apples\n",x)   需要包含C的头文件#include<cstdio>

04控制流

#include<iostream>
#include<cstdio>

int main()
{

    std::cout<<"Please input a number:\n";
    int y=0; 
    std::cin>>y;

    if(99==y)    ==判断字符   将常量放在==左边防止误用   if(99=y) 则报错
    { 
        std::cout<<"You are right!\n";
    }
    else
    {
        std::cout<<"You are wrong!\n";
    }

    return 0;
}

05结构体

1.通过 . 访问内部元素

2. 可以作为输入参数   或者返回值  

3. 可以引入成员函数

#include<iostream>

struct Point
{
    int x;
    int y;

    void nn()
    {
        x=x+1;
        y=y+1;
    }

};

Point func(Point p)
{

    p.x=p.x+1;
    return p;

}




int main()
{
    Point p;
    p.x=1;
    p.y=11;

    p=func()      ----结构体做输入参数   做返回值类型

    //p.nn();     -----结构体内建成员函数   更像一个类!!

    std::cout<<"x= "<<p.x<<"y= "<<p.y\n;


    return 0;
}    

持续更新,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值