C/C++
Pink_floyd
这个作者很懒,什么都没留下…
展开
-
简单单链表的建立
简单单链表的建立1.用户输入结点个数n后创建一个链表。2.录入学号与C++成绩,输出至屏幕。以下为源代码#include <iostream>using namespace std;//首先定义结构体struct student{ int num; //学号 float score; //分数 struct student ...原创 2019-04-01 21:10:16 · 1182 阅读 · 0 评论 -
纯虚函数与抽象类
纯虚函数纯虚函数:例如动态联编的示例中的虚函数virtual float area(){ return 0; },无法给出具体的函数实现,所以固定返回0。在很多情况下,存在基类中虚函数无法给出具体实现代码的情况,如写一个空的函数体,这就引出了虚函数的概念。纯虚函数在声明时要在函数原型的后面赋0,其声明格式如下:virtual <返回值类型> <函数名>(<参数...原创 2019-05-30 18:51:05 · 609 阅读 · 0 评论 -
运算符的重载
运算符重载C++给我们提供了许多内置数据类型的运算和自动转换操作,但我们有时候自定义的数据类型却无法使用,下面我们看两个例子:第一个例子是两个复数进行相加或相减的程序,Complex里有add和sub两个成员函数提供加减服务,执行结果正确。但往往我们希望能更为直接的使用它们,就像c=a+b一样计算出复数的结果,那么这个时候我们就需要用到运算符重载。接着是第二个使用运算符重载的例子。运算符重...原创 2019-05-30 21:06:28 · 153 阅读 · 0 评论 -
运算符重载为成员和友元函数及注意要点
运算符的重载规则运算符重载的实质是函数重载,C++编译器根据参数的个数和类型来决定调用哪个函数重载,运算符重载返回类型可以是任意的。重载后的运算符所做的操作要尽量保持原来的意义,否则会降低程序的可读性。C++中,用户不能定义新的运算符,只能对已有的运算符进行重载。有六个运算符不能重载:成员访问运算符".",成员指针运算符"->","*",作用域运算符"::",sizeof运算符和三目...原创 2019-05-30 21:23:25 · 2454 阅读 · 0 评论 -
C++_异常处理
异常处理在程序运行时,可能会遇到各种异常问题,例如:两数相除时除数为0,数组越界,内存空间不够,无法打开输入文件而不能读取数据,输入数据的类型有错等。如果程序没有对这些问题进行防范,导致程序出错,系统就只能终止程序的运行。因此,在设计程序时,应当分析程序运行时可能出现的各种意外情况,并分别指定相应的处理方法,增强系统的容错能力,这就是程序异常处理的作用。在小型程序中,异常处理方法比较简单,通...原创 2019-06-05 11:44:51 · 216 阅读 · 0 评论 -
定义“异常类”处理异常
定义异常类处理异常类似上一个博客中的例子输入一个学生的考试总分及科目数,计算并输出该学生的平均分。通过定义异常类的方式来处理除数为0和输入为负的异常。#include <iostream>using namespace std;//定义除数为0异常类class ZeroException{ private: char* msg; public: Zero...原创 2019-06-05 12:44:41 · 667 阅读 · 0 评论 -
异常处理中的构造和析构函数
异常处理中的析构函数C++异常处理的真正能力不仅在于它能处理各种不同类型的异常,还在于它具有异常处理前为构造的所有局部对象自动调用析构函数的能力。如果try块(或try块调用的函数)中定义了类对象,在建立该对象时要调用构造函数。如果在执行try块(或try块调用的函数)的过程中发生了异常,此时流程立即离开try块。那么此时流程就可能离开该对象的作用域而转到其他函数,因此应当做好结束对象前的清...原创 2019-06-05 15:14:51 · 727 阅读 · 0 评论 -
特殊运算符的重载(++)
++运算符的重载++运算符是单目运算符,这里我们重载为成员函数,所以不需要传入参数。++分为前置++和后置++,为了区分前置和后置,在后置中加一个int类型的参数。下面是++运算符重载的实例,- -类似,略。这里我们用到了this指针来操作对象。#include <iostream>using namespace std;//特殊运算符的重载(++运算符) cla...原创 2019-05-31 15:30:19 · 300 阅读 · 0 评论 -
类中默认的赋值运算符重载带来的“指针悬挂”问题
赋值运算符重载对任一类X,如果用户没有自定义的赋值运算符函数,那么编译系统将自动的为其生成一个默认的赋值运算符函数,默认赋值运算符函数重载形式如下:X&X::operator =(const X & source) { 成员间赋值 }若obj1和obj2是类X的两个对象,obj2已经被创建,则编译系统执行obj1=obj2时,就会调用默认的赋值运算符函数,...原创 2019-05-31 16:11:34 · 421 阅读 · 0 评论 -
模板的概念
模板逻辑功能相同而类型不同的函数,可以通过重载实现统一方式(相同接口),不同实现(不同功能)的调用。 重载提高了编程的灵活性,但有时重载的两个函数逻辑功能基本一样,只是参数类型不同,几乎相同的代码要重复编写,十分烦琐。此时可以利用模板来减少重复编码的工作。模板是实现代码复用的一种工具,是参数多态的一种体现。函数和类本身是一种抽象,可以解决一类问题,模板是再抽象的基础上再抽象,它可以实现...原创 2019-05-31 20:06:09 · 1110 阅读 · 0 评论 -
函数模板与模板函数
函数模板与模板函数函数模板是一组函数的抽象描述,它不是一个实实在在的函数,函数模板不会编译成任何目标代码。函数模板必须先实例化成模板函数,这些模板函数再程序运行时会进行编译和链接,然后产生相应的目标代码。函数模板的异常处理函数模板中的模板形参可实例化为各种类型,但当实例化模板形参的各模板实参之间不完全相同,就可能发生错误,如: template < class T> ...原创 2019-05-31 21:20:21 · 2648 阅读 · 0 评论 -
类模板的简单使用
类模板类模板的一般定义格式:template < class T>class 类名{};声明类模板后,定义对象的格式为:类模板名<实际类型名> 对象名(参数表);在类模板外定义成员函数的格式为:template < class T>函数返回类型 类模板名< T>::成员函数名(函数形参表){ }下面是类模板使用...原创 2019-06-01 15:52:09 · 288 阅读 · 0 评论 -
类模板与之前概念的复习实例
类模板与之前概念的复习实例#include <iostream>using namespace std;//类模板使用实例template <typename T>class Temp{ private: T* index; int len; public: Temp(int len1); //构造函数 ~Temp(); ...原创 2019-06-01 16:41:51 · 84 阅读 · 0 评论 -
C++泛型编程与STL标准模板库
引言 标准模板库(Standard Template Library,STL) 是一个高效,实用的C++程序库。它被容纳于C++标准库中,是ANSI/ISO C++标准中最新的,也是极具革命性的一部分。该库包含了诸多计算机科学领域里常用的基本数据结构和基本算法,也为C++程序员们提供了可扩展的应用框架,高度体现了软件的可复用性。STL概述 STL在C++程序设计中的作用是提供一个可供函...原创 2019-06-01 17:14:57 · 517 阅读 · 0 评论 -
STL_容器
容器 STL容器允许重复利用已有的实现构造自己特定类型下的数据结构,通过设置一些模板类,这些模板的参数允许用户指定容器中元素的数据类型,从而可以提高编程效率。 容器部分主要由头文件< deque>,< vector>,< list>,< map>,< queue>,< set>,< stack>组成。下表为...原创 2019-06-02 21:30:59 · 105 阅读 · 0 评论 -
STL_算法与迭代器
STL_算法 算法是STL的重要组成部分。STL提供了大约100个实现算法的模板函数,用户可以通过调用算法模板完成所需的功能。 一般来说,STL中的算法部分主要由头文件< algorithms>,< numeric>,< functional>组成。其中,头文件< algorithms>由模板函数组成,常见的函数涉及比较,交换,查找,排序等。...原创 2019-06-03 20:45:40 · 187 阅读 · 0 评论 -
内联函数与类
内联函数系统在调用函数时需要时间和空间的开销。在主函数中调用另外一个函数时,这个函数就要到内存入栈或者从内存中出栈。假设我们需要在主函数中调用一个简单的输出打印函数,如果需要调用函数100次,则意味着这个简单的函数需要进栈出栈100次,这样就把大量的时间花费在进栈和出栈上了,从而降低了程序执行的效率。而某些应用程序对效率又有较高的要求,要求系统响应时间尽量短,就提出了尽量压缩时间开销的要求。...原创 2019-06-21 20:07:46 · 557 阅读 · 0 评论 -
动态联编与虚函数
动态联编有时候我们并不希望某些环节在编译阶段完成,而需要它在程序运行时才可以确定将要调用的函数,称为动态联编。动态联编提高了编程的灵活性和程序的易维护性,但与静态联编相比,函数调用速度慢。虚函数是实现动态联编的基础,它是一种动态的重载方式,它允许在运行时建立函数调用与函数体之间的关系。虚函数是一个在基类中声明为virtual的函数,并在一个或多个派生类中被重新定义的成员函数,虚函...原创 2019-05-30 17:44:03 · 637 阅读 · 0 评论 -
静态联编
静态联编静态联编支持的多态性,我们将其称为编译时的多态性,又称为静态的多态性。静态联编是在程序开始执行之前进行的。即在编译,连接的过程中,系统可以根据类型匹配等特征确定在什么地方调用什么函数。那么可见,编译时的多态性可以通过函数重载来实现。函数重载的意义在于它可以用同一个名字访问一组相关的函数,能使用户为某一类操作取一个通用的名字。编译程序在编译时决定选择具体的函数段执行,这种方式也利于解...原创 2019-05-30 16:55:52 · 1274 阅读 · 0 评论 -
c指针的基础使用回顾一
指针的基础使用回顾一#include <iostream>/**指针的基础使用回顾一*/using namespace std;//交换函数里的*才真正访问到了a,b的空间,并对其空间里的值进行了交换操作//程序①void exchange(int *a,int *b){ int c; c=*a; *a=*b; *b=c; //...原创 2019-04-11 17:56:09 · 84 阅读 · 0 评论 -
动态分配内存malloc
动态分配内存malloc#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;/***动态分配内存示例***//*要求: * 程序产生n个1000以内的随机数,n值由用户输入, * 请将它们从小到大排序后输出。 ********...原创 2019-04-11 21:55:20 · 255 阅读 · 0 评论 -
rand函数的简单使用
rand函数的简单使用#include <iostream>#include <cstdlib>using namespace std;/****剪刀石头布游戏****/int main(){ int user=0; int pc=0; cout<<"****这是一个剪刀石头布游戏*****"<<endl; ...原创 2019-04-12 14:04:08 · 197 阅读 · 0 评论 -
C++类与对象的基本使用
C++类与对象基本使用记录最基本的使用。结构体:类:ps:结构体与类用法上类似,但结构体的成员在默认情况下都是公有的,所有成员在外部都可以通过结构体变量进行访问;而类需要实现封装和隐藏,所有成员一般默认为私有的,只能在类的内部访问,同时,在类的基础上可以实现继承和多态,这些都是结构体无法完成的。...原创 2019-04-15 18:29:31 · 206 阅读 · 0 评论 -
友元函数与友元类的使用
友元函数为了编程需要,当需要允许一个函数或类访问访问另一个类中的私有或保护成员时,这时可以将这些类或函数声明为类的友元。友元函数的声明:friend <返回值类型><函数名><(参数列表)>示例...原创 2019-04-21 15:13:41 · 427 阅读 · 0 评论 -
this指针的使用
this指针以下代码中定义了三个对象a,b,c. 因此有三个同样空间大小分别存放三个对象的数据成员。但是三个对象都同样调用了calCircle()函数.当不同对象的成员函数引用数据成员时,如何保证引用的是指定对象的数据成员呢?在每一个成员函数中都包含一个特殊的指针,称为this指针,它是指向本类对象的指针。this指针是一个特殊的隐含指针,它隐含在每一个类的非静态成员函数中(包括构造...原创 2019-04-21 17:38:18 · 390 阅读 · 0 评论 -
类的组合
类的组合类的组合是指:类中的成员数据是另一个类的对象。通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。例如:在定义了点类(Point)以后,我们希望通过两个点定义一点线段,甚至还希望通过三个点定义一个三角形,或四边形等等。类组合中的难点是关于它的构造函数设计问题。组合类中有其他类的对象作为成员,这些对象成员也成为类的内嵌对象成员。组合类在创建对象时,它的各个内嵌对象将首先被自动创...原创 2019-04-22 11:53:22 · 10406 阅读 · 4 评论 -
析构函数与构造函数
析构函数与构造函数的使用构造函数的引入:每个类的设计者可能都会按照自己的习惯设计一个用初始化数据成员的函数,如果每个类都有自己特定的初始化方法,用户在使用时就不方便。由于类定义对象后,都需要进行初始化,设计者可以设计统一的接口来完成初始化。这个统一的接口就是将对象初始化的工作统一交给类的构造函数来完成。构造函数的定义格式:<类名>: :<类名>(参数列表)...原创 2019-04-18 17:08:33 · 1577 阅读 · 0 评论 -
复制构造函数的浅复制和深复制
默认复制构造函数默认复制构造函数的原型声明(浅复制):<类名>(const <类名>& < obj >)系统生成的默认复制构造函数,它的所做工作大体如下:{mem1=obj.mem1;mem2=obj.mem2;mem3=obj.mem3;}默认复制构造函数的功能是把已知对象的每个数据成员的值依次赋值到新定义对象的对应成员中,不做...原创 2019-04-18 18:30:18 · 387 阅读 · 0 评论 -
派生类的基础使用
继承与派生下图为交通工具的分类层次结构。可以看出从下到上为事物的抽象化过程,从上到下则为抽象到具体化的过程。位于抽象化顶层的交通工具即可看为基类。继承与派生: 抽象层的顶端为基类,基类可以派生出派生类,派生类继承了基类的特征,并且同时可以加入自己独有的新特征使自己更为具体.派生类的定义格式如下:class 派生类名:继承方式 基类名{派生类新成员}#include &l...原创 2019-05-24 16:03:48 · 493 阅读 · 0 评论 -
关于继承成员的访问权限
关于继承成员的访问权限派生类继承基类有三种方式:公有继承,私有继承,保护继承。以下例子为之前的简单例子,分析以下程序可知:当派生类Student公有继承基类Person时:①. 派生类Student继承了基类Person中除构造函数和析构函数以外的所有成员。但是派生类可以直接调用它们吗?答案是并不都可以直接调用,需要看基类中成员的访问权限。②. 在基类Person中,数据成员是私有...原创 2019-05-24 17:27:20 · 697 阅读 · 0 评论 -
派生类的构造函数和析构函数
派生类的构造函数因为派生类不能继承基类的构造函数,所以必须定义自己的构造函数。并且派生类拥有自己的数据成员,因此,派生类的构造函数除了需要对自己的数据成员进行初始化外,还必须调用基类的构造函数初始化基类的数据成员。这种调用过程是编译系统自动完成的。若基类函数需要一些形参,派生类构造函数必须要传相应的参数给基类构造函数,否则编译会出现错误。派生类构造函数的一般格式如下:<派生类名...原创 2019-05-24 17:41:46 · 328 阅读 · 0 评论 -
多继承的定义与使用
多继承根据派生类继承基类的个数,将继承分为单继承和多继承。多继承的定义格式如下:class <派生类名>:<继承方式><基类名1>,…,<继承方式><基类名n>{ <派生类新定义的成员> }多继承构造函数的定义格式:class <派生类名>(<总参数表>):<基类名1>(&...原创 2019-05-27 16:22:34 · 575 阅读 · 0 评论 -
多继承中的同名隐藏
多继承中的同名隐藏在多继承的示例中,派生类中定义了与基类同名的函数print。对于在不同作用域声明的标识符,可见性原则是:如果存在两个或多个包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见;如果在内层声明了同名标识符,则外层标识符在内层不可见,此时称内层标识符隐藏了外层同名标识符,这种现象被称为同名隐藏规则。即:当作用域包含的时候,处于内层的...原创 2019-05-27 17:07:24 · 404 阅读 · 0 评论 -
多继承的二义性问题
多继承的二义性问题在同名隐藏示例中,如果我们去掉派生类中print函数的定义,仍然在主函数中通过对象调用print函数呢?显然,调用后程序会报错:request for member ‘print’ is ambiguous。译为:成员“print”的请求不明确。这里出现了程序的二义性问题,因为派生类多继承于两个基类,两个基类中都有同名函数print,所以编译出现错误。下面我们重点看这个图...原创 2019-05-27 17:59:52 · 590 阅读 · 0 评论 -
虚基类解决副本重复
虚基类对于前面同名隐藏和二义性的例子,在内存中,派生类对象c同时拥有两个a的空间。这两个a可以分别通过B1和B2调用基类A的构造函数进行初始化,能够存放不同的数值;也可以使用作用域操作符通过直接基类进行区分,分别进行访问。但是在大多数情况下,我们不需要两个同名副本,只需要保留一个即可,C++提供了虚基类技术来解决此问题。在前面的例子中,当我们定义一个派生类对象c时,它会构造B1类,B2类,B...原创 2019-05-27 18:24:38 · 189 阅读 · 0 评论 -
多态与联编的概念了解
多态的了解多态是指同样的消息被不同类型的对象接收时导致不同的行为。消息是指对类的成员函数的调用,不同的行为意味着不同的实现,即发送了相同的消息(调用了同名的函数),不同类型的对象的后台行为不同(实际执行了不同的函数)。面向对象中多态主要体现在以下4个方面:①.重载多态:即函数名相同,根据参数的个数或类型不同,选择对应的函数执行。②.强制多态:(两个实例)(1).int max(i...原创 2019-05-30 16:12:25 · 258 阅读 · 0 评论 -
ACLLib图形库的基本使用
ACLLib图形库的基本使用使用环境:Dev-C++ 5.7.1ACLLib图形库的下载:github上ACLLib的下载链接打开Dev-C++,新建项目,自定义你的文件名称点击Dev-C++:项目-添加,在所创main文件所在位置下添加acllib.c与acllib.h到项目中点击Dev-C++:项目-项目属性–参数-Linker,点击加入库。找到安装的Dev-C++的位置,在Dev...原创 2019-04-14 15:24:07 · 15979 阅读 · 7 评论