C++第一阶段
文章平均质量分 59
乐开享codiscter
这个作者很懒,什么都没留下…
展开
-
return type specification for constructor invalid
编译C++程序时,遇到如此错误: return type specification for constructor invalid。结果会出现:return type specification for constructor invalid 在网上搜的大部分说是:构造函数不应该有返回值,我检查了一下我的代码没有返回值啊,这时候我发现了一个重大的低级错误:在类声明完毕应该加分号。原创 2015-01-27 14:46:18 · 2914 阅读 · 0 评论 -
【007】动态内存管理
静态内存:变量(包括指针变量)、固定长度的数组、某给定的对象。可以在代码中通过它们的名字或者地址来访问和使用它们。动态内存:由一些没有名字、只有地址的内存块构成,那些内存块是在程序运行期间动态分配的。如果没有足够的内存空间:那么new语句则抛出std::bad_alloc异常。在用完内存块后要用delete把它归还给内原创 2015-01-28 10:34:38 · 420 阅读 · 0 评论 -
C++异常机制
一、 概述C++自身有着非常强的纠错能力,发展到如今,已经建立了比较完善的异常处理机制。C++的异常情况无非两种,一种是语法错误,即程序中出现了错误的语句,函数,结构和类,致使编译程序无法进行。另一种是运行时发生的错误,一般与算法有关。关于语法错误,不必多说,写代码时心细一点就可以解决。C++编译器的报错机制可以让我们轻松地解决这些错误。第二种是运行时的错误,常见的有文件打原创 2015-01-28 10:10:42 · 395 阅读 · 0 评论 -
【013】命名空间和模块化编程2
使用头文件 在创建了头文件之后,只要把它的文件名用双引号括起来写在如下所示的指令里就可以导入它:#include “fishc.h” 如果没有给出路径名,编译器将到当前子目录以及当前开发环境中的其他逻辑子目录里去寻找头文件。为了消除这种猜测,在导入自己的头文件时可以使用相对路径。如果头文件与主程序文件在同一个子目录里,则可以这么写:#incl原创 2015-01-28 15:56:13 · 454 阅读 · 0 评论 -
【006】运算符重载
所谓重载,就是重新赋予新的含义。函数重载是对一个已有的函数赋予新的含义,使之实现新功能。 其实运算符也可以重载。 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统自动调用该函数,以实现相应的运算。 也就是说,运算符重载是通过定义函数实现的。运算符重载实质是函数的重载。 重载运算符的函数一般格式如下: 函数类型 opera原创 2015-01-27 17:30:20 · 419 阅读 · 0 评论 -
【012】命名空间和模块化编程
命名空间和模块化编程接下来我们将重点讨论两个相互关联的简单概念: 第一个概念是模块化(modularization)把程序划分成多个组成部分(即所谓的“模块”)这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。 第二个概念是命名空间(namespace)这个概念相比起C语言是C++里新增加的东西,编写的原创 2015-01-28 15:31:47 · 445 阅读 · 0 评论 -
【011】如何避免内存泄露
如果程序很长时间(例如在服务器上),并且在不停地申请新内存块,忘记释放那些已经不再有用的老内存块,将迟早把内存消耗殆尽,直接导致后边的NEW操作无法执行,甚至是崩溃。栈空间往下生长,堆空间往上生长。这样的编程漏洞成为内存泄露(memory leak).new语句所返回的地址是访问这个内存块的唯一线索,同时也是delete用来把这个内存块归还给内存池的原创 2015-01-28 15:06:56 · 440 阅读 · 0 评论 -
【010】高级强制类型转换
要点总结 我们用传统的强制类型转换实现:把所需要的指针类型放在一对圆括号之间,然后写出将被强制转换的地址值。Company *company = new Company(“APPLE”, “Iphone”);TechCompany *tecCompany = company; 注意不能既删除company,又删除tecCompany。因为强制原创 2015-01-28 15:01:17 · 414 阅读 · 0 评论 -
【009】副本构造器
地球人都知道,我们可以把一个对象赋值给一个类型与之相同的变量。编译器将生成必要的代码把”源”对象各属性的值分别赋值给”目标”对象的对应成员。这种赋值行为称之为逐位复制(bitwise coyp)。这种行为在绝大多数场合都没有问题,但如果某些成员变量是指针的话,问题就来了:对象成员进行逐位复制的结果是你将拥有两个一摸一样的实例,而这两个副本里的同名指针会指向相同的地址。。。原创 2015-01-28 14:40:46 · 530 阅读 · 0 评论 -
c++成员函数的重载、覆盖、隐藏区别
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的原创 2015-01-27 17:10:45 · 397 阅读 · 0 评论 -
【005】抽象方法,即“纯虚函数”
抽象方法(abstract method,也可以称为纯虚函数)是面向对象编程技术的另一个核心概念,在设计一个多层次的类的继承关系时常会用到。 把某个方法声明为一个抽象方法等于告诉编译器这个方法必不可少,但我现在(在这个基类里)还不能为它提供一个实现!!! 抽象方法的语法很简单:在声明一个虚方法的基础上,在原型末末尾加上" = 0"。 这是告诉编译器不用浪费时间在这个类原创 2015-01-27 17:05:01 · 419 阅读 · 0 评论 -
【004】虚方法
使用指向对象的指针:先认识下new和delete:int *point = new int;//定义一个指向整型的指针,用new创建一个整型的指针*pointer =110;std::coutdelete pointer;最后一步非常关键和重要,这是因为C和C++不会自动释放内存,程序中的每一个new操作都必须有一个与之对应的delete操作!所以程序在原创 2015-01-27 16:51:18 · 409 阅读 · 0 评论 -
【001】初识C++ (一)
1.初始C++输入输出一:#include #include using namespace std;int main(){ fstream fp ("text.txt",ios::in | ios::out) ; //用可读可写的方式打开 if( !fp ){ cerr<<"打开文件失败,"<<endl; return 0; } fp<<"Iloveyou!!原创 2015-01-26 14:15:56 · 419 阅读 · 0 评论 -
C++多态的实现原理
1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。4. 多态用虚函数来实现,结合动态绑定。5. 纯虚函数是虚函数再加上= 0。6. 抽象类是指包转载 2015-01-27 17:06:05 · 596 阅读 · 0 评论 -
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。原创 2015-01-27 16:19:42 · 364 阅读 · 0 评论 -
【002】初识C++ <二 > 保留关键字(Typedef)、构造器和析构器
1.保留关键字 取别名(Typedef) 2.对象的创建属性+方法!33.1定义构造器 3.2 注意原创 2015-01-27 11:35:23 · 495 阅读 · 0 评论 -
【003】继承 构造器 析构器
在c++继承体系中,创建一个对象后:1、对于构造器:先进 父类 后 子类。2、对于析构器:先进 子类 后 父类。代码演示:#include #include class BaseClass{ public : BaseClass(); ~BaseClass(); void dosomething();};class SubClass : publi原创 2015-01-27 14:48:52 · 349 阅读 · 0 评论 -
【008】动态数组
int a[20];int *x = a;指针变量x指向数组a的地址,a[0]和*x都取代数组的第一个元素。a[1]等价于*(x+1)a[2]等价于*(x+2)把一个数组声明传递给new语句,使它返回一个该数组基类型的指针。eg.int *x = new int[10]; x[1]=45;原创 2015-01-28 12:28:00 · 384 阅读 · 0 评论