C++补充知识+专题思维导图

补充知识:

1.nullptr

NULL在源码中就是一个0,因此可能会出现一些二义性的问题。

#include 

using namespace std;

void func(int a)
{
    cout << "a =" << a << endl;
}

void func(int *b)
{
    cout << "b =" << b << endl;
}

int main()
{
    func(NULL); // a = 0

    return 0;
}

在C++11中使用nullptr代替NULL,作为空指针的表示方式,在C++中,可以用作空指针常量,表示指针不指向任何有效的内存地址。

#include 

using namespace std;

void func(int a)
{
    cout << "a =" << a << endl;
}

void func(int *b)
{
    cout << "b =" << b << endl;
}

int main()
{
    func(nullptr); // b = 0

    return 0;
}

2.类型推导

使用auto关键字可以推导类型,C++11引入的。

#include 

using namespace std;


int main()
{
    auto a = 10; // a 的类型被推导为整型(int)
    cout << a << endl;

    auto i2 = 10.2; // i2的类型被推导为浮点型
    cout << i2 << endl;

    auto i3 = new auto(10); // i3 被推导为int*
    cout << *i3 << endl;

    auto i4 = 'a';
    cout << i4 << endl;    
    
    return 0;
}

decltypt可以推导表达式的类型,需要注意,decltypt只会分析表达式的类型,不会具体计算表达式的值。

#include 

using namespace std;


int main()
{
    auto x = 1;
    auto y = 2;

    decltype(x * y + 121) z = 892.88; // int * int + int = int
    cout << z << endl; // 892

    return 0;
}

3.初始化列表

C++11中引入了列表初始化语法,可以使用{}对对象进行初始化。

#include 
#include 
#include 

using namespace std;

class Student
{
private:
    string name;
    int age;
public:
    Student(string name,int age):name(name),age(age)
    {
    }

    void show()
    {
        cout << name << " " << age << endl;
    }
};

int main()
{
    Student s = {"张胜男",18}; // 列表初始化
    s.show();

    arrayarr1 = {1,3,4,5,6};

    vector vec1 ={1,2,3};

    int arr2[] = {2,3,45,6};

    int a{};
    cout << a << endl;  // 0
    return 0;
}

4.进制输出

C++11可以对整数进行不同进制的输出。

#include 

using namespace std;

int main()
{
    // 为了区分不同进制,可以增加进制显式的功能,此功能设定持久
    cout << showbase;

    cout << dec << 1234 << endl;    // 1234
    cout << oct << 1234 << endl;    // 02322

    // 输出进制显示是持久的
    cout << 9 << endl;  // 011

    cout << hex << 256 << endl; // 0x100

    // 取消进制显式的功能
    cout << noshowbase;
    cout << 16 << endl; // 10
    return 0;
}

5.设定输出域宽度 

可以使用setw()来制定一个整数或者一个字符串输出占用的与宽度。

#include 
#include 

using namespace std;

int main()
{
    // 仍然会按照实际的宽度输出
    cout << setw(5) << 123456 << setw(5) << 123456 << endl;

    cout << setw(10) << 123456 << setw(10) << 123456 << endl;

    // 设置域宽度,只能作用于下一行
    cout << setw(10);
    cout << 123456 << endl;
    
    cout << 123456 << endl;
    return 0;
}

6.C++11新增了哪些特性?

  • auto(类型推导)
  • 智能指针(后三个)
  • 初始化列表
  • for-each
  • 类型转换函数(四个cast 函数)
  • 继承构造(可以用 using Base::Base; 让子类自动继承父类的构造函数)
  • array(顺序容器)
  • override
  • 进制输出

C++专题思维导图

搭配文章一起学习,代码一定要多练!

C++补充知识+专题思维导图_第1张图片

你可能感兴趣的:(C++,c++,算法,开发语言,面向对象)