随笔分类 - C/C++
摘要:RTTI是什么 Run Time Type Identification:运行时类型识别;通过运行时类型识别,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型。 Human *phuman = new Men; Human &q = *phuman; 主要是通过两个运算符来
阅读全文
摘要:循环引用问题 “循环引用”简单来说就是:两个对象互相使用一个shared_ptr成员变量指向对方的会造成循环引用。导致引用计数失效。 即A内部有指向B,B内部有指向A,这样对于A,B必定是在A析构后B才析构,对于B,A必定是在B析构后才析构A,这就是循环引用问题,违反常规,导致内存泄露。 #incl
阅读全文
摘要:weak_ptr weak_ptr概述: 用来辅助shared_ptr进行工作 week 弱 弱共享 弱引用 共享其他shared_ptr所指向的对象 强指针指的是 shared_ptr 弱指针指的是 weak_ptr weak_ptr 也是类模板,也是智能指针,这个智能指针用来指向一个shared
阅读全文
摘要:友元函数 友元函数:通过将该函数声明为某个类的友元函数,它就能访问这个类的所有成员,包括:protected,private; 友元类 把其他类定义成当前类的友元类;那么其他类的成员函数可以访问当前类的成员函数和变量(private、protected); 注意:每个类负责自己的友元类; 友元关系不
阅读全文
摘要:基类指针/派生类指针 基类指针可以new派生类对象,但是子类对象不能new基类指针; 基类指针new了子类对象,但是还是无法调用子类对象,需要借助虚函数; #include <iostream> using namespace std; class Human { public: Human();
阅读全文
摘要:派生类概念 类之间有层次关系; 父类(基类、超类);子类(派生类); 父类中定义一些公用的成员变量和成员函数;通过继承父类来构建子类; class 子类名:继承方式:父类 派生类对象定义时调用构造函数的顺序 当定义子类对象时候,父类和子类的构造函数都会被调用,而且,父类的构造函数的函数体先执行,子类
阅读全文
摘要:重载运算符 本质上是一个函数,赋值运算符如果缺省,系统会自动生成一个;比较运算符不会; 格式: 返回类型 operator 运算符(参数列表) 拷贝赋值运算符 Time mytime; //调用无参构造函数 Time mytime2 = mytime; //定义初始化 调用了拷贝构造函数 mytim
阅读全文
摘要:拷贝构造函数 默认情况下,类对象的拷贝是每个成员变量逐个拷贝; 含义:首先是一个类的构造函数,第一个参数是所属的类类型的引用,如果还有其他额外参数,那么这些额外参数必须都有默认值,函数默认参数必须放在函数声明,除非该函数没有函数声明; 作用:需要调用的时候,系统自动调用 建议: 拷贝构造函数第一个参
阅读全文
摘要:类内初始化 c++11中,可以为类内成员变量提供一个初始值,在创建对象的时候,初始值就可以用来初始化该成员变量。在头文件中可以赋初值。 const成员变量的初始化 两种方式: 在头文件定义时赋初值进行初始化 在构造函数的初始化列表中进行初始化,不可以通过赋值来初始化 //类定义(类声明) class
阅读全文
摘要:类中实现成员函数(inline) 类内的成员函数实现其实也叫类内的成员函数定义,这种直接在类的定义中实现的成员函数,会被当做inline内联函数来处理。 成员函数末尾的const 含义: const: 常量,在成员函数的后面增加一个const,不但要在成员函数声明中增加const,也要在成员函数定义
阅读全文
摘要:构造函数 构造函数的定义 在类中,有一种特殊的成员函数,它的名字和类名相同,我们在创建类的对象的时候,这个特殊的成员函数就会被系统自动调用,这个成员函数,就叫“构造函数”。因为构造函数会被系统自动调用,所以我们可以简单的理解成 构造函数的目的就是初始化类对象的数据成员; 构造函数 构造函数没有返回值
阅读全文
摘要:类 类是我们自己定义的数据类型(新类型),设计类时要考虑的角度 1)站在设计和实现者的角度来考虑 2)站在使用者的角度来考虑 3)父类、子类; 类基础 一个类就是一个用户自己定义的数据类型,我们可以把类想象成一个命名空间,包着一堆东西(成员函数和成员变量) 一个类的构成:成员变量,成员函数(有很多特
阅读全文
摘要:static_cast 完全替代C风格的类型转换,实现基本类型转换 对象指针转换时,可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针;如果类与类之间不相关,就无法相互转换; 注意:如果父类指针指向一个父类对象,此时将父类指针换成子类指针虽然可以通过static_cast实现,但是这种转换
阅读全文
摘要:指针和数组 #include <iostream> using namespace std; void equal(char str7[], char str8[]) { printf("%d\n", str7 == str8); } int main() { char str1[6] = "hel
阅读全文