
C++Primer
形形色色的人
这个作者很懒,什么都没留下…
展开
-
默认继承保护级别
有一种常见的误解认为用struct保留字定义的类与用class定义的类有很大的区别。唯一的不同只是默认的成员保护级别和默认的派生保护级别,没有其他的区别。1. 用class定义的类,默认的成员访问级别为private。struct定义的类成员默认访问级别是public。2. 使用class关键字定义的派生类默认具有private继承,而用struct关键字定义的类默认具有public继承:原创 2015-09-05 23:09:05 · 553 阅读 · 1 评论 -
stl之std::alloctor 配置器源码
#include "new.h"#include #include #include #include "iostream.h"#include "algobase.h"template inline _Tp* allocate(ptrdiff_t __size, _Tp*) { set_new_handler(0); _Tp* __tmp = (_Tp*)(::原创 2017-01-15 21:48:02 · 468 阅读 · 0 评论 -
const 详解
const在函数前与函数后的区别 一 const基础 如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500; const int* a = &b; [1] int const *a = &b;原创 2016-09-28 11:22:09 · 382 阅读 · 0 评论 -
关联容器 Map
#include#include#includeusing namespace std;typedef mapint>::value_type valType;typedef mapint>::iterator mapIterator;void PrintMap(mapint> &m){for(mapIterator mapit = m.原创 2015-06-04 09:45:42 · 451 阅读 · 0 评论 -
普通引用和const引用的初始化
普通引用和const引用的初始化 当引用的初始式是一个左值(是一个对象,你可以取得他的地址)时,其初始化就是非常简单的事情。普通T&的初始式必须是一个T类型的。 而cosnt T&则不必是一个左值,甚至可以不是T类型的。在这样的情况下,经过以下几个步骤。 (1)首先,如果需要的话,将应用到类型T的隐式类型转换。 (2)而后,将结果存入一个类型T的临时变量。原创 2016-09-28 10:16:13 · 637 阅读 · 0 评论 -
头文件
头文件用于声明而不是用于定义extern int val = 10;double fica_rate;原创 2016-09-27 14:57:14 · 269 阅读 · 0 评论 -
String的构造函数拷贝构造函数
#includeusing namespace std;class String{private: char *m_Str;protected:public: String(const char *str = NULL) { if (str == NULL) { m_Str = new char[1]; *m_Str = '\0'; } els原创 2015-12-24 09:10:27 · 650 阅读 · 0 评论 -
合成析构函数和析构函数
今天看《c++ primer》的时候,突然看到合成析构函数这个名词,对析构函数了解的多点,对合成析构函数则了解的不多。析构函数特点:1.整个类只有一个,即不能重载;2.没有形参;3.没有返回值;4.不能被继承(继承的是成员变量和成员函数,个人理解严格说这些构造函数,析构函数不能称之为“函数”,因为不符合函数定义的特征,所以构造函数,析构函数不能被继承)5.可以手动调用(不理转载 2015-12-02 23:28:56 · 1032 阅读 · 0 评论 -
调用拷贝构造函数的时机
#includeusing namespace std;class Position{private: int x; int y;public: Position(){} Position(int x, int y) :x(x), y(y) { cout } ~Position()原创 2015-12-08 22:48:30 · 389 阅读 · 0 评论 -
C++ 重载 重写
#include #include using namespace std;//重载只放在在一个类里面 ,在编译期间就确定class Parent{public: Parent() { cout << "Parent:printf()..do" << endl; }public: void aaaaa() { ; } void func() { cou原创 2015-12-15 17:24:37 · 369 阅读 · 0 评论 -
多态使用的注意点
#include using namespace std;//指针也是一种数据类型,指针数据的数据类型是指,它所指的内存空间的数据类型//最后一点引申 指针的步长class Parent{protected: int i; int j;public: virtual void func() { cout << "Parent::func()" << endl;原创 2015-12-15 14:51:07 · 415 阅读 · 0 评论 -
数组指针和指针数组的区别(转)
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2015-09-20 23:29:42 · 405 阅读 · 0 评论 -
引用形参
引用形参---直接关联其所绑定对象,而并非是对象的副本。从C语言背景到C++程序员习惯通过传递指针来实现对实参的访问,在C++中,使用引用形参则更安全和更自然。引用形参作用:1、通过引用形参返回额外的信息、2、利用const引用避免复制如果使用引用形参的唯一目的是避免复制实参,则应将形参定义为const引用定义为const引用,可以避免修改实参,而只使用了形参的原创 2015-09-18 16:43:23 · 1389 阅读 · 1 评论 -
数组的形参与实参,通过引用传递数组
在《C++ Primer 第四版》的第七章中,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参与实参类型的一部分,编译器检查数组实参的大小与形参的大小是否匹配。#includeusing namespace std;void output(int (&a)[13原创 2015-09-18 11:43:09 · 7440 阅读 · 5 评论 -
C++ primer第四章
4.1--------------------数组4.2--------------------指针的引入4.3--------------------C风格字符串4.4--------------------多维数组 4.1数组数组是由类型名,标示符,维数组成的符合数据类型。类型名指定了放在数组中元素的类型,维数指定了数组的长度。4.1.1数组的定义和初始化原创 2015-09-30 15:54:14 · 291 阅读 · 0 评论 -
C++ const引用、临时变量 引用参数
C++引用—临时变量、引用参数和const引用如果实参与引用参数不匹配,C++将生成临时变量。如果引用参数是const,则编译器在下面两种情况下生成临时变量: 实参类型是正确的,但不是左值 实参类型不正确,但可以转换为正确的类型左值参数是可被引用的数据对象,例如,变量、数组元素、结构成员、引用和被解除引用的指针都是左值,非左值包括字面原创 2017-05-27 11:46:25 · 1098 阅读 · 0 评论