文章分类 - C++
摘要:最近在看《Effective C++》,其中很多地方用到了智能指针。所以决定花时间了了解一下它。 一、简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行
阅读全文
摘要:先来看一个栗子吧。 注释掉的部分会出现错误: 2 IntelliSense: 没有与这些操作数匹配的 "<<" 运算符 操作数类型为: std::basic_ostream<char, std::char_traits<char>> << std::string c:\Users\Administr
阅读全文
摘要:一、理解深拷贝和浅拷贝: 先来看一个栗子,引出什么是浅拷贝。 s1给s2初始化时,会调用拷贝构造函数,因为没有编写,则会调用默认的拷贝构造函数,拷贝构造函数会按成员赋值,这样s2的指针会指向s1的指针指向的空间;但析构的时候,会先释放s2指向的空间,但当析构s1指向的空间时,因为s2和s1是指向相同
阅读全文
摘要:例子: 例二: 这个例子的关键是,如果没有高亮部分的 int A::a = 0; 那么编译会出错。 编译以上代码会出现“对‘A::a’未定义的引用”错误。 这是因为静态成员变量a未定义,也就是还没有分配内存,显然是不可以访问的。 静态成员属于全局变量,是所有实例化以后的对象所共享的,而成员的初始化你
阅读全文
摘要:继承基本概念 继承概念 C++中的类成员访问级别(public、private、protected) 思考:如何恰当的使用public,protected和private为成员声明访问级别? 1、需要被外界访问的成员直接设置为public 2、只能在当前类中访问的成员设置为private 3、只能在
阅读全文
摘要:每一个具体的类的类型,是一个static。 定义一个模板类,不同类型的类使用的static不是同一个。 因为编译器自动帮我们写了不同的类型的类。
阅读全文
摘要:当类模板遇上友元函数的时候有些规矩与我们的常规想法不一样。 看一下下面的代码 编译居然不通过 错误 1 error LNK2019: 无法解析的外部符号 "class Complex<double> __cdecl operator+(class Complex<double> const &,cl
阅读全文
摘要:怎么证明vptr指针存在呢??用代码来说明。 虚函数表指针(VPTR)被编译器初始化的过程 vptr:一个具有虚函数类的对象所具有的隐藏的成员,指向该类的虚函数表. 父类对象的vptr指向是一直指向父类的.但子类的vptr指针最终是指向子类的, 当子类创建的时候,先调用父类构造函数,这个时候vptr
阅读全文
摘要:多态实现的实质: 一个类,如果成员函数中添加了virtual关键字,编译器会在类中生成一个虚函数表.如下图 虚函数表是一个存储类成员函数指针的数据结构,虚函数表是由编译器自动生成与维护的,虚函数表是在编译的时候产生的. virtual成员函数会被编译器放入虚函数表中 存在虚函数时,编译器会悄悄地为每
阅读全文
摘要:多态的实现效果 多态:同样的调用语句有多种不同的表现形态; 多态实现的三个条件 有继承、有virtual重写、有父类指针(引用)指向子类对象。 多态的C++实现 virtual关键字,告诉编译器这个函数要支持多态;不要根据指针类型判断如何调用;而是要根据指针所指向的实际对象类型来判断如何调用多态的理
阅读全文
摘要:为什么会出现多态??? 赋值兼容性原则遇上函数重定义的时候就出现了问题。 重定义重写重载,傻傻分不清楚是吧。补充一下: 重定义重写重载 好啦,理解了什么是重写后,下面来看看这段代码。 //面向对象新需求 //如果我传一个父类对象,执行父类的print函数 //如果我传一个子类对象,执行子类的prin
阅读全文
摘要:学习模板特化的时候,看到了一个模板偏特化。。。又是一个未知的概念,所以有开始了学习。 模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。 先看类模板: 那么下面3句依次调用类模板、全特化与偏特化: 而对于函
阅读全文
摘要:在读《effectiveC++》的时候有一节将swap()函数偏特化,基础薄弱的我根本不知道什么叫做模板偏特化,所以学习一下模板偏特化,记录一下。 C++的模板提供了对逻辑结构相同的数据对象通用行为的定义。这些模板运算对象的类型不是实际的数据类型,而是一种参数化的类型。C++中的模板分为类模板和函数
阅读全文
摘要:类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换
阅读全文
摘要:区别: memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。 一、memcpy函数 Me
阅读全文
摘要:String类的简单实现: 1、在拷贝构造函数和赋值运算符重载这两个函数中有浅拷贝和深拷贝的问题 2、要对输入输出函数重载 3、赋值运算符重载有两种方式。注意在采用交换实现的时候函数的参数只能是临时变量 这里有一个函数 String& Insert(int posl, const String& s
阅读全文
摘要:今天编写一个简单的string类,结果错误百出,写出来警示一下自己,要多动手。。。。 要求: 编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为:class String{public:String(const char *str = NULL); // 普通构造函数S
阅读全文
摘要:语法基础: //template关键字告诉c++编译器,现在我要进行泛型编程, //typename 告诉c++编译器,T为数据类型,,,请你不要乱报错。。。。。 //T为数据类型,T为数据类型参数化,而已。。。。。int char double template<typename T> void
阅读全文
摘要:C++函数模块基础知识: 一. 问题: 强类型语言要求我们为所有希望比较的类型都实现一个实例 int min( int a, int b ) { return a < b ? a : b; } double min( double a, double b ) { return a < b ? a :
阅读全文
摘要:今天看到友元函数,竟然觉得有点生疏了。故来聊聊友元函数。 为什么会出现友元函数??? 先来看一个例子引入今天的主角: 在来个例子。这次是带static成员变量的: 因为外部函数无法访问类的私有成员(无论是静态还是非静态的),只有类的成员函数才可以。 友元函数打破类的封装性,使得外部函数可以访问类的私
阅读全文

浙公网安备 33010602011771号