随笔分类 - C++
1
C++ 学习笔记
摘要:异常 ◼ 异常是一种在程序运行过程中的发生的不好预测的错误(比如内存不够) ◼ 异常没有被处理,会导致程序终止 ◼ throw异常后,会在当前函数中查找匹配的catch,找不到就 终止当前函数代码,去上一层函数中查找。如果最终都找不 到匹配的catch,整个程序就会终止 #include <iost
阅读全文
摘要:C++11新特性 auto 可以从初始化表达式中推断出变量的类型,大大简化编程工作 属于编译器特性,不影响最终的机器码质量,不影响运行效率 int a = 10; int b = 20; auto p = [a] () mutable { a++; cout << "lambda - " << a
阅读全文
摘要:类型转换 C语言风格的类型转换符 (type)expression type(expression) C++中有4个类型转换符 static_cast dynamic_cast reinterpret_cast const_cast 使用格式:xx_cast(expression) const_ca
阅读全文
摘要:模板 泛型,是一种将类型参数化以达到代码复用的技术,C++中使用模板来实现泛型 模板的使用格式如下 template <typename\class T> typename和class是等价的 模板没有被使用时,是不会被实例化出来的 模板的声明和实现如果分离到.h和.cpp中,会导致链接错误 一般将
阅读全文
摘要:运算符重载 (operator overload) 运算符重载(操作符重载):可以为运算符增加一些新的功能 // operator overload //class Point { // friend Point operator+(const Point &, const Point &); //
阅读全文
摘要:友元 友元包括友元函数和友元类 如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所有成员 如果将类A声明为类C的友元类,那么类A的所有成员函数都能直接访问类C对象的所有成员 友元破坏了面向对象的封装性,但在某些频繁访问成员变量的地方可以提高性能 #include <i
阅读全文
摘要:Const 成员 const成员:被const修饰的成员变量、非静态成员函数 const成员变量 必须初始化(类内部初始化),可以在声明的时候直接初始化赋值 非static的const成员变量还可以在初始化列表中初始化 const成员函数(非静态) const关键字写在参数列表后面,函数的声明和实现
阅读全文
摘要:静态成员 静态成员:被static修饰的成员变量\函数 可以通过对象(对象.静态成员)、对象指针(对象指针->静态成员)、类访问(类名::静态成员) 静态成员变量 存储在数据段(全局区,类似于全局变量),整个程序运行过程中只有一份内存 对比全局变量,它可以设定访问权限(public、protecte
阅读全文
摘要:多继承 C++允许一个类可以有多个父类(不建议使用,会增加程序设计复杂度) using namespace std; class Student { public: int m_score; Student(int score = 0) :m_score(score) { } void study(
阅读全文
摘要:对象类型作为函数的参数或者返回值, 使用对象类型作为函数的参数或者返回值,可能会产生一些不必要的中间对象 class Car { int m_price; public: Car(int price = 0) :m_price(price) { cout << "Car(int) - " << th
阅读全文
摘要:多态 默认情况下,编译器只会根据指针类型调用对应的函数,不存在多态 多态是面向对象非常重要的一个特性 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 在运行时,可以识别出真正的对象类型,调用对应子类中的函数 多态的要素 子类重写父类的成员函数(override) 父类指针指向子类对象
阅读全文
摘要:初始化列表 特点 一种便捷的初始化成员变量的方式 只能用在构造函数中 初始化顺序只跟成员变量的声明顺序有关 struct Person { int m_age; int m_height; Person() { this->m_age = 0; this->m_height = 0; } // 初始
阅读全文
摘要:声明和实现分离 #pragma once // 声明 .h 头文件 class Person { int m_age; public: Person(); ~Person(); void setAge(int age); int getAge(); }; #include "Person.h" #i
阅读全文
摘要:构造函数 构造函数(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作 特点 函数名与类同名,无返回值(void都不能写),可以有参数,可以重载,可以有多个构造函数 一旦自定义了构造函数,必须用其中一个自定义的构造函数来初始化对象 注意 : 通过malloc分配的对象不会调用构造函
阅读全文
摘要:内存 内存空间的布局 每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域 代码段(代码区) 用于存放代码 数据段(全局区) 用于存放全局变量等 栈空间 每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段栈空间 自动分配和回收 堆空间 需要主动去申请和释放 堆空间
阅读全文
摘要:类 C++中可以使用struct、class来定义一个类 struct和class的区别 struct的默认成员权限是public class的默认成员权限是private struct Person { int m_id; int m_age; int m_height; void display
阅读全文
摘要:引用的本质 引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针 一个引用占用一个指针的大小 常引用 引用可以被const修饰,这样就无法通过引用修改数据了,可以称为常引用 const必须写在&符号的左边,才能算是常引用 const引用的特点 可以指向临时数据(常量、表达式、函数返
阅读全文
摘要:内联函数 使用inline修饰函数的声明或者实现,可以使其变成内联函数 建议声明和实现都增加inline修饰 特点 编译器会将函数调用直接展开为函数体代码 可以减少函数调用的开销 会增大代码体积 注意 尽量不要内联超过10行代码的函数 有些函数即使声明为inline,也不一定会被编译器内联,比如递归
阅读全文
摘要:cin &cout #include <iostream> using namespace::std; int main(int argc, const char * argv[]) { // insert code here... int age; cin >> age; cout << "Hel
阅读全文
摘要:面试题 int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); printf("%d, %d", *(a + 1), *(ptr + 1)); a代表有5个元素的数组的首地址,a[5]的元素分别是1,2,3,4,5。接下来,a + 1表示数
阅读全文
1

浙公网安备 33010602011771号