c++知识

Posted NodYoung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++知识相关的知识,希望对你有一定的参考价值。

虚函数

多态性是面向对象语言的基本特征,多态性可以简单地概括为“一个接口,多种方法”。多态性分为静态多态性(编译过程中绑定)和动态多态性。
函数重载(和运算符重载)属于静态多态性,一个函数名(调用接口)对应着几个不同的函数原型(方法)。
虚函数属于动态多态性,对比如下:
通过对象名访问虚函数时,调用哪个类的函数取决于定义对象名的类型(对象类型是基类时,就调用基类的函数;对象类型是子类时,就调用子类的函数)。
使用指针访问非虚函数时,编译器根据指针本身的类型决定要调用哪个函数(而非根据指针指向的对象类型)。
使用指针(或引用)访问虚函数时,编译器根据指针所指对象的类型决定调用哪个函数(而与指针本身的类型无关)。

指针数组与数组指针

指针数组:装着指针的数组。int *a[10]
数组指针:指向数组的指针。int (*p)[10]

不同类型数据的占用空间大小

unsigned long long最大值ULLINT_MAX=0xffffffffffffffff(~18*10^18);
int最大值INT_MAX=0x7fffffff(~2*10^8)

标准模板库STL的常用容器

顺序容器:vector, deque, list
关联容器:set, multiset, map, multimap
写个multiset实现最小堆的例子:

#include <vector>
#include <set>
#include <iostream>
using namespace std;

struct Custom 
    int a;
    char b;
;

int main() 
    vector<Custom> v Custom 1, 'a'  ,Custom 3, 'c' , Custom 4, 'd'  ,Custom 2, 'b'  ;
    auto cmp = [](Custom left, Custom right)  return left.a < right.a; ;
    multiset<Custom, decltype(cmp)> customSet(cmp);
    customSet.insert(v.begin(), v.end());
    multiset<Custom, decltype(cmp)>::iterator customIterator;
    while(!customSet.empty()) 
        customIterator = customSet.begin();
        cout << (*customIterator).a << (*customIterator).b << " ";
        customSet.erase(customIterator);
    
    return 0;

容器适配器: stack, queue, priority_queue 。都有3个成员函数:push()、top()、pop()。

排序算法sort

需要随机访问迭代器(vector、deque)的支持。
写个sort和lambda结合排序的例子:

#include <vector>
#include <iostream>
#include<algorithm>
using namespace std;

struct Custom 
    int a;
    char b;
;

int main() 
    vector<Custom> v Custom 1, 'a'  ,Custom 3, 'c' , Custom 4, 'd'  ,Custom 2, 'b'  ;
    auto cmp = [](Custom left, Custom right)  return left.a < right.a; ;
    sort(v.begin(), v.end(), cmp);
    for (Custom& e : v) 
        cout << e.a << e.b << " ";
    
    return 0;

输出:1a 2b 3c 4d

以上是关于c++知识的主要内容,如果未能解决你的问题,请参考以下文章

c++面向对象三大特征封装继承和多态知识总结

c++知识点总结--静态与动态类型

c++面向对象三大特征封装继承和多态知识总结

C++作为面向对象语言的三个基本特征:封装,继承和————

C++之面向对象的三个基本特征

C++获取基类指针所指子类对象的类名