zoukankan      html  css  js  c++  java
  • C++基础

    C++命名空间(名字空间):

    为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念

    #include <stdio.h>
    //将类定义在命名空间中
    namespace Diy{
        FILE fp = NULL;
        class Student{
        public:
            char *name;
            int age;
            float score;
      
        public:
            void say(){
                printf("%s的年龄是 %d,成绩是 %f
    ", name, age, score);
            }
        };
    }
    int main(){
        Diy::Student stu1; 
        stu1.name = "小明";
        stu1.age = 15;
        stu1.score = 92.5f;
        stu1.say();
        return 0;
    }
    

    :: 为域解析操作符

    C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std。std 是 standard 的缩写,意思是“标准命名空间”。

    保留原来的库和头文件,C++ 中可继续使用,再把原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间 std 下,就成了新版 C++ 标准库。这样共存在了两份功能相似的库,使用了老式 C++ 的程序可继续用原来的库,新开发的程序可以使用新版的 C++ 库。

    老式 C++ --> 规范C++

    iostream.h-->iostreamfstream.h-->fstream

    而对于原来C语言的头文件,采用同样的方法的基础上,每个名字前添加一个c字母

    ``stdio.h-->cstdiostdlib.h-->cstdlib`

    用新的库文件都可用为stdnamespace

    在 main() 函数中声明命名空间 std,它的作用范围就位于 main() 函数内部,如果在其他函数中又用到了 std,就需要重新声明

    #include <iostream>
    void func(){
        //必须重新声明
        using namespace std;
        cout<<"http://c.biancheng.net"<<endl;
    }
    int main(){
        //声明命名空间std
        using namespace std;
        cout<<"C语言中文网"<<endl;
        func();
        return 0;
    }
    
    

    作用全局范围,放于函数体外部

    #include <iostream>
    //声明命名空间std
    using namespace std;
    void func(){}
    int main(){
        return 0;
    }
    

    C++输入输出

    编写 C++ 程序时,需要使用输入输出,则需要包含头文件iostream,它包含了用于输入输出的对象,常见的cin表示标准输入、cout表示标准输出、cerr表示标准错误.

    iostream 是 Input Output Stream 的缩写,意思是“输入输出流”

    #include<iostream>
    using namespace std;
    int main(){
        int x;float y;
        cout<<"Please input an int number:"<<endl;
        cin>>x;
        cout<<"The int number is x= "<<x<<endl;
        cout<<"Please input a float number:"<<endl;
        cin>>y;
        cout<<"The float number is y= "<<y<<endl;   
        return 0;
    }
    

    cout 进行输出时需要紧跟<<运算符,使用 cin 进行输入时需要紧跟>>运算符,这两个运算符可以自行分析所处理的数据类型,因此无需像使用 scanfprintf 那样给出格式控制字符串.

    cout cin 都是 C++ 的内置对象,而不是关键字,在C++ 提前创建好的对象称为内置对象中.

    endl 最后一个字符是字母“l”,而非阿拉伯数字“1”,它是“end of line”的缩写

    C++布尔类型

    C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真.(没有彻底从语法上支持“真”和“假”)

    C++ 新增了 bool 类型(布尔类型),是 C++ 中的关键字(用法和 intcharlong 是一样的),它一般占用 1 个字节长度。bool 类型只有两个取值,truefalsetrue 表示“真”,false 表示“假”.

    bool flag = true;
    
    

    C++ new和delete运算符

    C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。(C++中,这两个函数仍可使用) 如下所示:

    int *p = (int*) malloc( sizeof(int) * 10 );  //分配10个int型的内存空间
    free(p);  //释放内存
    

    C++新增两个关键字,newdelete

    new 用来动态分配内存,delete 用来释放内存。

    int *p = new int;  //分配1个int型的内存空间
    delete p;  //释放内存
    

    分配一组连续的内存以存储数据,用new[]:

    int *p = new int[10];  //分配10个int型的内存空间
    delete[] p;
    

    new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,通常 newdeletenew[]delete[] 操作符应该成对出现,并且不要和C语言中 malloc()free() 一起混用.

    C++ inline内联函数

    函数调用是有时间和空间开销的, 若函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销不容忽视。

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。

    注意,要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字虽然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 关键字。

    指定内联函数的方法很简单,只需要在函数定义处增加 inline 关键字。

    #include <iostream>
    using namespace std;
    //内联函数,交换两个数的值
    inline void swap(int *a, int *b){
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
    }
    int main(){
        int m, n;
        cin>>m>>n;
        cout<<m<<", "<<n<<endl;
        swap(&m, &n);
        cout<<m<<", "<<n<<endl;
        return 0;
    }
    

    C++函数重载

    参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序, 只要有一个不同就叫做参数列表不同

    #include <iostream>
    using namespace std;
    //交换 int 变量的值
    void Swap(int *a, int *b){
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 float 变量的值
    void Swap(float *a, float *b){
        float temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 char 变量的值
    void Swap(char *a, char *b){
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    //交换 bool 变量的值
    void Swap(bool *a, bool *b){
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    

    函数的重载的规则:

    • 函数名称必须相同。
    • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
    • 函数的返回类型可以相同也可以不相同。
    • 仅仅返回类型不同不足以成为函数的重载。
  • 相关阅读:
    centos yum 安装php7.2
    Linux CentOS完全卸载PHP
    Linux: cp 复制文件、文件夹到文件夹
    CentOS 7 yum安装LAMP,LNMP并搭建WordPress个人博客网站
    cin循环输入控制问题
    有序数组中的二分查找
    二叉查找树中元素的删除操作
    如何生成能在没有安装opencv库及vs2010环境的电脑上运行的exe文件
    冒泡排序算法,选择排序算法,插入排序算法
    使用迭代法穷举1到N位最大的数
  • 原文地址:https://www.cnblogs.com/Zak-NoS/p/11673904.html
Copyright © 2011-2022 走看看