
深入学习C++
hold_on2014
这个作者很懒,什么都没留下…
展开
-
对象的使用
一、static成员、static成员函数、类/对象大小计算static:对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量。比如说统计某种类型对象已创建的数量。如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时我们可以用类的静态成员来解决这个问题。非static数据成员存在于类类型的每个对象中,static数据成员独立该类的任原创 2014-02-20 17:43:01 · 646 阅读 · 0 评论 -
面向对象计算器(五)
主要是为了更正之前的设计缺陷原创 2014-05-19 10:14:14 · 663 阅读 · 0 评论 -
类与类之间的关系
UMLuml是统一建模yu'yan原创 2014-05-13 12:51:12 · 565 阅读 · 0 评论 -
面向对象表达式
表达式计算器设计原创 2014-05-14 08:35:47 · 689 阅读 · 0 评论 -
关于strtod
字符串转doubledouble strtod(const char *nptr, char **endptr);char* p;number_ = strtod(&buf_[curPos_], &p);原创 2014-05-14 13:56:58 · 619 阅读 · 0 评论 -
面向对象表达式(2)
首先分清值语义与对象语义原创 2014-05-14 13:38:40 · 646 阅读 · 0 评论 -
面向对象的表达式计算器(三)
SCANNER类的实现扫描器的实现原创 2014-05-14 15:24:44 · 967 阅读 · 0 评论 -
面向对象表达式(四)
实现PARSER类其实就是对原创 2014-05-14 19:16:33 · 667 阅读 · 0 评论 -
面向对象版计算器(六)
SymbolTable实现接下来的任务是让表达式支持变量与函数。如a=100a+5+log(0)这里变量名与函数都算是符号,所以要有一个表存储这些符号SymbolTable原创 2014-05-22 10:30:16 · 925 阅读 · 0 评论 -
面向对象版计算器(七)
Storage类实现Storage类用于存储一些变量与常量的值:原创 2014-05-23 10:25:00 · 667 阅读 · 0 评论 -
面向对象版计算器(八)
让表达式计算器支持变量赋值a=5原创 2014-05-23 10:35:32 · 789 阅读 · 0 评论 -
面向对象版表达式(九)
解决一些Bug:1 按回车出bug原创 2014-05-29 14:48:02 · 572 阅读 · 0 评论 -
面向对象版表达式(十)
FunctionTable实现让表达式计算器支持函数运算原创 2014-05-30 12:26:15 · 1026 阅读 · 0 评论 -
c++中c_str()的用法详解
//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组//主要介绍c_str//c_str():生成一个const char*指针,指向以空字符终止的数组。//这个数组应该是string类内部的数组#include //需要包含cstring的字符串#include using namespace std;int main(){ //string转载 2014-09-25 11:10:33 · 53636 阅读 · 0 评论 -
字符串与数字之间的转换
//将string转换为double#include #include using namespace std;int main(){ //将string转换为double,可以利用cstr 还有atof string s("1324.56"); double d = atof(s.c_str()); cout<<d<<endl;}转载 2014-09-25 12:55:54 · 568 阅读 · 0 评论 -
判断素数的新方法
由上述原理可知,10000以下的素数也可以采取上诉方法,但是最大素数比较难算,干脆就直接列举程序://一个合数可以表示为几个素数的乘积//如果是素数的倍数,那么此数就不是素数//此方法称为素数筛选法#include#define N 10000int main(){ int i; int j; int a[N]; for(i = 2;i < N;i++) a[i]原创 2014-02-21 16:52:09 · 528 阅读 · 0 评论 -
小端与大端模式深度剖析
首先是对小端还有大端模式的剖析转载 2014-11-11 15:22:08 · 581 阅读 · 0 评论 -
运算符重载
目标:1、运算符重载2、成员函数重载3、非成员函数重载4、运算符重载规则运算符重载允许把标准运算符(如+、—、*、/、等)应用于自定义数据类型的对象直观自然,可以提高程序的可读性体现了C++的可扩充性运算符重载仅仅只是语法上的方便,它是另一种函数调用的方式运算符重载,本质上是函数重载不要滥用原创 2014-02-24 16:52:41 · 616 阅读 · 0 评论 -
定义在类中的友元函数的访问权限?
这个问题是个有趣的问题。问题的答案是:类域内定义的友元函数调用时必须具有该类类型的实参。解释如下:首先类域内定义的友元函数应该如何看待呢?C++标准的规定:11.4 FriendsA function can be defined in a friend declaration of a class if and only if the class is a non转载 2014-04-24 17:07:10 · 2492 阅读 · 0 评论 -
从一个对象实例看数据抽象与封装
本章目标:1、用C的方式实现栈2、用C++数据抽象的方式实现栈 3、比较两者的差异性栈的插入用头插法,这样子访问最快不采用头节点。C代码:#include#include#include//定义栈中的元素struct Link{ int data; struct Link* next;};//定义一个栈结构体//只需要头指针(没有头结点)/原创 2014-02-21 16:23:58 · 558 阅读 · 0 评论 -
友元
友元是一种允许非类成员函数访问类的非公有成员的一种机制。可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。1、友元函数(在类汇总不是成员函数)2、友元类(不是类对象)一、友元类1、友元函数在类作用域外定义,但它需要在类体中进行说明注:即使在类中进行定义 它的作用域还是在类体之外2、 为了与该类的原创 2014-02-24 16:08:59 · 575 阅读 · 0 评论 -
String
string 字符串 char*vector 动态数组 map key/value 内部是以树的形式进行存储 string类型支持长度可变的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作 typedef basic_string string; string是一个模版类typedef原创 2014-02-26 19:38:14 · 572 阅读 · 0 评论 -
介绍C++
一个问题是:为什么学习C++?1、C++能提升性能。提升性能意味着钱。C++之父Bjarne Stroustrup戏称C++可以减轻全球变暖问题。2、编程语言的需求总结为四个:效率(efficiency),灵活(flexibility),抽象(abstraction),生产力(productivity)。C语言注重前两者,C++注重前三者,JAVA、.net这些注重后两者。原创 2014-02-17 11:33:58 · 554 阅读 · 0 评论 -
MAP类型
使用map得包含map类所在的头文件 #include 这是哈希表的一种变种,采用key-value来存储,内部的数据结构是红黑树,所以必须指定key的类型定义一个map对象: map mapTest; //用string作为索引,存储int对象插入数据有四种方式:mapTest["aaa"] = 100;mapTest.insert(map:原创 2014-02-28 16:14:27 · 525 阅读 · 0 评论 -
从C到C++
1、逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节。声明方式:bool result;result=true;可以当作整数用(true一般为1,false为0)把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false#includeusing原创 2014-02-17 19:14:11 · 670 阅读 · 0 评论 -
面向对象介绍
机器语言就是一些机器能读懂的二进制指令集合汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。高级语言高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法原创 2014-02-18 16:46:39 · 610 阅读 · 0 评论 -
类与对象
类声明公有、私有、保护成员数据抽象和封装注:ide是一个集成开发环境头文件的编写#ifndef _CLOCK_H_#define _CLOCK_H_#endif目的是为了防止头文件被重复使用编写规范:在数据成员后面加下划线 int hour_;int minute_;成员函数原创 2014-02-18 17:26:45 · 485 阅读 · 0 评论 -
构造函数与析构函数
一、构造函数与析构函数构造函数是特殊的成员函数创建类类型的新对象,系统自动会调用构造函数构造函数是为了保证对象的每个数据成员都被正确初始化几点详细说明:函数名和类名完全相同不能定义构造函数的类型(返回类型),也不能使用void通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用构造函数被声明为私原创 2014-02-19 11:01:28 · 725 阅读 · 0 评论 -
动态创建对象
有点类似于java的反射技术运行时动态获取类型信息(方法与属性)动态创建对象动态调用对象的方法动态操作对象的属性需要给每个类添加元数据动态创建对象对原有的类不做任何更改,只需要增加一个宏就能实现动态创建注:就是为了消除if else 可以在初始化静态成员变量前面加上__decl原创 2014-03-11 11:52:00 · 455 阅读 · 0 评论 -
C++对象模型
为什么要有虚基类表。因为它是共享的,运行时会调整指针所指向的地址BB *pp;pp = &dd(dd是一个派生类)pp->bb_;pp在运行时就会自动指向一块内存和dd的地址是不一样的B2 *p2;p2 = ⅆp2->bb_;//p2会自动跳转到它的位置,然后查找虚基类表。#include原创 2014-03-11 19:32:32 · 406 阅读 · 0 评论 -
继承
注:没有使用继承 就没有使用到面向对象 使用对象 仅仅是使用了数据抽象OO: Object-OrientedOOD:面向对象的设计 OOAD: UML 面向对象原则 设计模式 设计原则C++很重要的一个特征就是代码重用。在C语言中重用代码的方式就是拷贝代码、修改代码。C++可以用继承或组合的方式来重用。通过组合或继承现有的的类来创建新类,而不是重新创建它们。原创 2014-03-03 17:20:51 · 656 阅读 · 0 评论 -
RTTI(runtime type information Identification) 运行时类型识别
目标:dynamic_cast运算符typeid运算符 返回的是一个type_info对象type_infodynamic_castreinterpret_cast不做任何的对齐操作() c风格还是会做一些对齐操作的class type_info {public: virtual ~type原创 2014-03-13 19:29:00 · 502 阅读 · 0 评论 -
VECTOR动态数组
vector是同一种类型的对象的集合 vector的数据结构很像数组,能非常高效和方便地访问单个元素vector是一个类模板(class template) 要使用vector必须包含相关头文件#include using std::vector; 注:空间是连续的 空间是可以扩展的 (貌似是矛盾的 在STL会剖析具体使用)VE原创 2014-02-27 14:21:01 · 573 阅读 · 0 评论 -
虚函数与多态
(一):多态静态绑定与动态绑定虚函数虚表指针object slicing与虚函数overload、override 、overwrite多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。关于多态:多态的实现:静态绑原创 2014-03-05 13:36:31 · 682 阅读 · 0 评论 -
C 指针
第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让 我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr;转载 2014-05-15 12:09:09 · 442 阅读 · 0 评论 -
指针偏移问题
int *p = (int*)100p是int类型的指针,它的意义是int型数据的地址。这条语句就是将100转换为int*赋给p,转载 2014-09-25 11:31:04 · 6029 阅读 · 0 评论