C++
Herrycoder
这个作者很懒,什么都没留下…
展开
-
C++之类模板(二)
继承中的类模板 子模板类派生普通类 时,需要具体化模板类 class B :public A C++编译器需要知道 父类的数据类型 ====> 要知道父类所占的内存大小 以进行分配内存 子模板类 #include<iostream> using namespace std; template<class T> class A { protected: ...原创 2019-10-17 20:55:02 · 286 阅读 · 0 评论 -
C++之类模板(一)
为什么要使用类模板 类模板与函数模板的定义和使用类似,我们已经进行了介绍。 有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,所以提出了类模板 类模板用于实现类所需数据的 类型参数化 类模板在表示如数组、表、图等数据结构显得特别重要,这些数据结构的表示和算法不受所包含的元素类型的影响 类模板语法 template<typename T,…> 或者template<...原创 2019-10-17 20:40:21 · 118 阅读 · 0 评论 -
C++之模板机制本质剖析
模板机制本质 先给出结论: 编译器并不是把函数模板处理成能够处理任意类的函数 编译器从函数模板通过具体类型产生不同的函数 编译器会对函数模板进行两次编译 在声明的地方对模板代码本身进行编译;在调用的地方对参数替换后的代码进行编译。 这涉及到了编译器编译原理,gcc编译器编译分以下几个过程:预处理、编译、汇编、链接 对模板代码本身进行编译 在调用的地方对不同类型参数替换后的代码进行编译...原创 2019-10-17 20:11:48 · 195 阅读 · 0 评论 -
C++之函数模板(三)
当函数模板遇上函数重载 现在考虑这样一个问题,如果写了两个相同函数体的函数,一个是模板函数,一个是普通函数,那么C++编译器会怎么进行调用呢? 还是以之前的swap数据交换为例: #include<iostream> using namespace std; template<typename T> void myswap(T &a, T &...原创 2019-10-17 11:13:23 · 143 阅读 · 0 评论 -
C++之函数模板(二)
函数模板做函数参数 接下来,以不同类型数组实现从大到小排序,介绍函数模板做函数参数 int型和char型数组从大到小排序 #include<iostream> using namespace std; int Sort(int *arr, int size) { int tmp; if(arr == NULL){return -1;} for(int i = 0; i ...原创 2019-10-17 10:47:15 · 75 阅读 · 0 评论 -
C++之函数模板(一)
为什么会有函数模板? 函数模板的提出,是为了减少程序员的重复性操作。 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。 例如:实现不...原创 2019-10-17 10:14:48 · 114 阅读 · 0 评论 -
C++学习之继承二(继承中的构造和析构)
继承中的构造和析构 如何初始化父类成员?父类与子类的构造函数有什么关系? 子类对象构造时, 调用父类构造函数对其成员初始化 子类对象析构时, 调用父类析构函数对 继承的成员进行清理 调用顺序原则–> 先调用父类构造 先调用子类析构 小结 子类对象可以当做父类对象使用 子类对象可以直接赋值给父类对象 子类对象可以直接初始化父类对象 父类指针可以直接指向子类对象 父类引用可...原创 2019-10-07 22:21:48 · 161 阅读 · 0 评论 -
C++学习之继承三(继承和组合混搭下的构造和析构)
继承和组合混搭下的构造和析构 调用原则 先构造父亲 在构造成员变量 最后构造自己 先析构自己 在析构成员变量 最后析构父亲 2.案例 class OBJ { public: OBJ(int a, int b) { this->a = a; this->b = b; cout << "obj构造函数" <<" a"<<...原创 2019-10-07 22:36:21 · 112 阅读 · 0 评论 -
C++学习之继承四(继承中同名成员变量成员函数处理方式)
继承中同名成员变量成员函数处理方式 依然继承父类的成员变量和成员函数; 同名情况: 子类屏蔽父类; 加作用符 :: ,以区分原创 2019-10-07 22:38:25 · 167 阅读 · 0 评论 -
C++学习之继承五(继承中的static关键字)
继承中的static关键字 static关键字,遵守派生类的访问控制规则; 静态成员的初始化,更是为了分配内存!因为在继承中用到了静态成员对象; 在写构造函数时候注意:在未添加public关键字时,默认是private,影响继承。 案例 #include<iostream> using namespace std; class A { public: static int...原创 2019-10-08 10:19:43 · 406 阅读 · 0 评论 -
C++学习之继承六(多继承)
多继承 概念:一个类有多个直接基类的继承关系 语法:class child : public Parent1,public Parent2… 案例 #include<iostream> using namespace std; class base1 { public: base1(int b1) { this->b1 = b1; } void printb...原创 2019-10-08 10:33:49 · 89 阅读 · 0 评论 -
C++学习之继承七(继承的二义性)
继承的二义性 如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性; 解决方法:虚继承 virtual关键字 案例 #include<iostream> using namespace std; class B { public: int b; }; class B1 : virtual public B { p...原创 2019-10-08 10:50:58 · 149 阅读 · 0 评论 -
C++学习之继承八(多继承剖析)
多继承的派生类构造和访问 多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员 执行顺序:与单继承构造函数类似;多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序 一个派生类对象拥有多个直接或者间接基类的成员;不同成员访问不会出现二义性;如果不同的基类有同名成员,派生类对象访问时应该加以识别 案例: #include<iostream> us...原创 2019-10-08 11:09:05 · 249 阅读 · 0 评论 -
C++学习之继承一(单个类的访问控制)
单个类的访问控制 先回顾几种访问控制 public: 修饰的成员变量和方法 在类的内外都能使用 private: 修饰的成员变量和方法 只能在类的内部使用 protected: 修饰的成员变量和方法 在类的内部和子类中使用 案例 #include<iostream> using namespace std; class A { public: int a; pro...原创 2019-10-07 22:09:32 · 87 阅读 · 0 评论 -
C++学习之运算符重载在项目开发中的应用
实现一个字符串类 构造函数要求: MyString a; MyString a("dasfa"); MyString b = a; 常用的操作符: << >> != == > < = C语言中,没有字符串这种类型,是通过数组来模拟字符串;C++中我们来设计一个字符串 ,以零结尾的字符串 MyString.h #include<iostream> ...原创 2019-10-07 21:53:54 · 172 阅读 · 0 评论 -
C++学习之引用
引用 概念:引用就是变量/对象的 门牌号,别名 比如 #include <iosteam> using namespace std;原创 2019-09-09 21:01:00 · 88 阅读 · 0 评论 -
C++学习之函数重载
概念 对函数名相同,参数不同的函数的调用 例如: void test() { return; } void main() { test(); } void test(int a) { cout<<a<<endl; } void main() { test(1); } 判断标准 函数重载至少满足以下条件之一: 参数个数不同 参数类型不同 参数顺序...原创 2019-09-10 09:19:21 · 103 阅读 · 0 评论 -
vs2013调试时总是要加载公共符号
问题描述:进行程序编译,经常会出现正在加载XXX符号,Microsoft符号服务器 解决办法: 菜单栏选项: 工具 -> 选项 调试 Microsoft符号服务器去掉勾选 解决! ...原创 2019-09-16 14:36:25 · 489 阅读 · 0 评论 -
C++学习之面向对象模型this指针
引入 C++对象模型可分为: 语言中直接支持面向对象程序设计的部分,主要涉及如:构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。 对于各种支持的底层实现机制:在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函...原创 2019-09-16 15:38:26 · 126 阅读 · 0 评论 -
C++学习之全局函数和成员函数
1.把全局函数转化成成员函数 通过this指针隐藏左操作数 Test add(Test &t1, Test &t2)===》Test add(Test &t2) 案例:实现 t1 = t1 + t2 class Test { public: Test(int a = 0, b = 0) { this->a = a; this->b =...原创 2019-09-16 16:24:07 · 9664 阅读 · 1 评论 -
C++学习之对象的动态建立和释放
1.new和delete基本语法 软件开发过程中,需要动态分配和撤销内存空间,例如动态链表中结点的插入与删除。 C语言中利用库函数:malloc和free函数 C++中提供了 运算符 : new和delete 一般使用格式: 用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。 2. ...原创 2019-09-16 18:14:32 · 219 阅读 · 0 评论 -
C++学习之数组类——类的设计和封装
1. 先设计类的框架 设计一个数组 2. 再实现测试案例 数组元素赋值,打印 (类设计) 头文件MyArray.h #pragma once #include <iostream> using namespace std; class Array { public: Array(int length); //长度 Array(const Array & ...原创 2019-09-20 10:22:41 · 399 阅读 · 0 评论 -
C++学习之友元函数和友元类
友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。 尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数; 友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。 如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend ...原创 2019-09-24 09:10:02 · 180 阅读 · 0 评论 -
C++学习之运算符重载一
引言 类 ,也是一种数据类型,相当于用户自定义的一种数据类型。那么,既然是用户自定义的,C++编译器肯定时无法识别的 为此,要想对同一运算符实现不同的功能,就要我们人为重写一个重载函数,在程序中遇到运算符时,就可以调用我们写好的函数,实现运算符的另一功能 这也就是运算符重载的本质:函数调用 下边,以重载加号+运算符为例,认识运算符重载 重载+运算符 #include<ios...原创 2019-09-28 11:11:11 · 115 阅读 · 0 评论 -
C++学习之运算符重载二
重载赋值操作符= 赋值运算符重载用于对象数据的复制 operator= 必须重载为成员函数 重载函数原型为:类型 & 类名 :: operator= ( const 类名 & ) ; 案例:完善Name类,支持=号操作。 #include<iostream> using namespace std; class Name { public: Name(co...原创 2019-09-28 14:18:17 · 79 阅读 · 0 评论 -
C++学习之运算符重载三
重载 [ ] == 操作符原创 2019-09-28 20:54:31 · 82 阅读 · 0 评论 -
C++学习之操作符重载总结
近期学习重载的几个小结: 操作符重载是C++的强大特性之一; 操作符重载的本质:通过函数拓展操作符的语义; operator 关键字是 操作符重载的关键; friend 关键字可以对 函数或类开发 访问权限; 操作符重载 遵循函数重载的规则; = [ ] () -> 操作符,只能通过成员函数进行重载; ++操作符 通过一个int 占位参数 进行前置与后置重载的区分; C++中不要 重载&a...原创 2019-10-07 15:40:33 · 196 阅读 · 0 评论 -
C++学习之命名空间
namespace命名空间 基本常识 所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择: 直接指定标识符。例如std::ostream而不是ostream。完整语句如下: std::cout << std::...原创 2019-09-09 19:47:34 · 242 阅读 · 0 评论