C++
文章平均质量分 56
cainiao000001
正在学习中
展开
-
记一次愚蠢的错误 free(): invalid next size (fast): 0x08d82008 ***
自己搭建一个字符串类,在重载+=时一直报这类关于内存的错误:free(): invalid next size (fast): 0x095f6070是由于对指针0x095f6070指向的空间,进行写操作超过了他实际申请的大小经过长时间的检查后发现new[]写成了new()!!!导致实际上只分配了1字节的空间,却想写一个字符串完全超过了实际的大小,自然在析构的时候会出现内存错误。申请内存应该是 ch...原创 2018-04-03 22:46:48 · 25317 阅读 · 2 评论 -
隐式类型转换
表达式会包含隐式类型转换,它由编译器自动执行,不需程序员介入。何时发生隐式类型转换1. 在混合类型的表达式中,操作数会被转换为相同类型int ival; double dval;ival >= dval; // ival converted to double2. 条件表达式会被转换为bool类型。int ival; if (ival) // ival conver...原创 2018-09-01 10:48:01 · 539 阅读 · 0 评论 -
C++继承模型的内存布局
对于多继承情况考虑示例代码 1 2 3 struct Base1 {...}; struct Base2 {...}; struct Derived : Base1, Base2 {...}; 有如下内存布局首先出现的是派生类Derived类的虚表指针vptr(这里插入一个提醒:一直以来vptr都被国人...转载 2018-08-18 10:05:54 · 385 阅读 · 0 评论 -
在C++中为什么构造函数不能是虚函数,而析构函数可以
、为什么构造函数不可以是虚函数①从存储空间角度 虚函数对应一个vtable(虚函数表),这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。②从使用角度 虚函数主要用于在信息不全的情况下,能使重载的函数...原创 2018-08-12 10:01:26 · 7260 阅读 · 2 评论 -
记一道错题——C++中delete和delete[]的区别
今天刷到一道题目结果出乎意料的ggl所以记录一下以下涉及到内存管理的代码段中,有错误的是:int *a=new int(12);//..... free(a);int *ip=static_cast<int*>(malloc(sizeof(int)));*ip=10;//.....delete ip;double *a=new double[1];//.....原创 2018-08-07 10:08:46 · 2514 阅读 · 0 评论 -
C++复习——类和对象的基础知识
C++类和对象类类构成了实现C++面向对象程序设计的基础。 类是C++封装的基本单元,它把数据和函数封装在一起。一个类描述一类事物,描述这些事物所应具有的属性。 定义成员函数 类定义是提供给更多不同用途的程序共享的,并不受单个程序应用的影响而“优化”。 在类中定义的成员函数一般规模都比较小,且特别的switch语句不允许使用。 类中的函数一般为内联函数,即使没有...转载 2018-07-29 14:36:47 · 370 阅读 · 0 评论 -
MYSQL数据库(二)——简单应用
#include <stdio.h>#include "mysql.h"#include <stdlib.h>MYSQL *init(){ MYSQL *mysql, *con; mysql = mysql_init(NULL); //初始化mysql对象 if (NULL == mysql) { printf("mysql_init : ...原创 2018-06-24 20:30:24 · 363 阅读 · 0 评论 -
后缀表达式计算(代码)
#include <iostream>#include <stack>using namespace std;int Priority(char ch){ switch(ch) { case '(': return 3; case '*': case '/': return 2; case '+': case '-': ...原创 2018-05-05 20:44:08 · 3454 阅读 · 1 评论 -
C++标准模板库(一)
之前学习自定义模板时觉得自定义模板比较抽象,使用起来较为繁琐。作为C++标准库相当重要的一部分,STL库提供一系列组件操作。为我们解决了这个问题。标准模板库STL包括容器、迭代器、算法;容器指包含数据的数据结构,容器中包含的对象是元素;迭代器指用来访问容器中的元素对象,相当于元素对象的指针;算法指一些能在各种容器中通用的标准算法,如排序、插入等;算法使用迭代器在容器上进行操作。STL常见容器:序列...原创 2018-05-05 20:42:19 · 285 阅读 · 0 评论 -
C++模板的使用
假设想要编写函数返回两个数之和,我们往往会定义几个重载函数来实现不同类型的变量相加:int add(int a,int b){return (a + b);}double add(double a,double b){return (a + b);}这些函数几乎相同,它们之间唯一的区别是形参的类型,每个函数的函数体是相同的。每个要比较的类型都需要重复函数的函数体,不仅麻烦而且容易出...原创 2018-04-30 20:42:36 · 226 阅读 · 0 评论 -
C++继承
C++提供继承的目的是为了在不同的类型之间提取共性,提高代码的重用率,并且可以灵活地对基类根据实际的使用场景进行改造设计通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。注:类的继承默认是私有继承在C++语言中,一个派生类可以从一...原创 2018-04-11 15:51:59 · 234 阅读 · 0 评论 -
C++多态
C++多态表现形式主要有函数重载、运算符重载和虚函数等,其中函数重载、运算符重载是静态多态,虚函数是动态多态。也就是说,C++中运行时的多态性主要是通过虚函数重载来实现的。1.静态多态静态链编或早绑定:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用该函数,否则出现编译错误。2.动态多态动态链编或晚绑定:在程序执行期间(非编...原创 2018-04-15 22:15:40 · 1076 阅读 · 0 评论 -
C++类(一)
类的默认成员函数一. 类的六个默认成员函数:1、构造函数 2、拷贝构造函数 3、析构函数 4、赋值操作符重载 5、取地址操作符重载 6、const修饰的取地址操作符重载【构造函数】 成员变量为私有的,要对他进行初始化,必须用一个公有成员函数来进行。同时这个函数应该有且仅在定义对象时自动执行一次,这时调用的函数为构造函数(constructor)。 (1)函数名与类名相同。 (2)无返回值。 (3)...原创 2018-03-21 22:21:31 · 292 阅读 · 0 评论 -
C++运算符重载
在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。以MyString类为列#ifndef _MYSTRING_H_#define _MYSTRING_H_#include <iostream>using ...原创 2018-03-31 18:58:42 · 253 阅读 · 0 评论 -
C++复习
能过说出面向对象编程的六大特点,其中最重要的是继承,多态;(1)封装性.①将有关的代码和数据封装在一个对象中,各对象间相对独立,互不干扰.②将对象中的某些部分对外隐蔽,隐蔽内部细节,只留下少量接口. 对象的内部实现和外部行为分隔开来,人们在外部进行控制,具体的操作细节在内部实现,这样大大降低了人们操作对象的复杂程度.(2)抽象性. 类是对象的抽象, 对象是类的具体表现形式....原创 2018-09-09 16:41:40 · 398 阅读 · 0 评论