STL容器:array核心总结

std::array用于表示固定大小的数组。 std::array<T, N>语义上等同于一个C语言风格数组T[N],但它不会自动退化为T*。 array的size std::array<T, N>的大小在编译时就已经确定。其大小等于sizeof(T) * N。 array的构造函...

阅读更多

C++关键字-ooverride和final

override override关键字确保你在派生类中正确地重写了一个虚函数。 override确保: 基类中存在一个同名的虚函数。 派生类中重写的函数签名(函数名、参数列表和常量性)与基类虚函数完全匹配。 如果不满足上面任何一条,编译器就会报错。 class Base { virtua...

阅读更多

C++面向对象:多态

多态,字面意思就是“多种形态”,也就是对同一个行为具有多个不同表现形式。 C++中,多态主要指的是通过一个基类的指针或引用来调用派生类的虚函数时,程序能够在运行时根据实际指向的对象类型来决定调用哪个函数版本。 class Base { public: virtual void foo() { ...

阅读更多

友元

友元允许一个函数或类访问另一类的私有和保护成员,从而突破封装性,实现数据共享。友元有两种类型:友元函数和友元类。 友元使设计更灵活,但也降低了封装性,应谨慎使用。 友元函数 友元函数是一个在类外部定义的函数,但它被授予了访问该类私有成员的权限。友元函数不属于任何类,它只是一个普通函数。 声明: class ...

阅读更多

C++面向对象:多重继承

继承格式 class <派生类名> : <继承权限1> <基类名1>, <继承权限2> <基类名2>, … { <派生类新定义成员> }; 构造顺序 定义派生类对象时,构造函数的执行顺序和派生类定义时继承的顺序保持一致。 析...

阅读更多

malloc和free实现分析

函数原型 #include <stdlib.h> /* * 分配一块指定大小的、未初始化的连续内存 * sz: 想要分配的字节数 * 返回值: * 成功时,返回指向新分配内存块的首地址 * 失败时,返回NULL */ void *malloc (size_t sz); /* * 分...

阅读更多

C++面向对象:继承

通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。 基类负责定义所有类共同拥有的成员,而每个派生类定义各自特有的成员。 继承格式 单继承: class <派生类名> : <继承权限> <基类名> {...

阅读更多

C++面向对象:封装

封装的核心思想是信息隐藏。通过将类的内部状态设为私有(private),并提供公有(public)的接口来访问和修改这些状态。 访问修饰符 public:公有成员,可以在类的任何地方被访问。作为类的接口,供外部使用者调用。 private:私有成员,只能在类的内部被访问。派生类和外部代码都不能直接访...

阅读更多