c++
文章平均质量分 55
小迷糊171
不要假装很努力,结果不会陪演戏。
展开
-
求n个数的阶乘和
#include<iostream>using namespace std;float f(int n){ float jc; if(n<0){ cout<<"data error"<<endl; } else if(n==0||n==1){ jc=1; } else{ jc=f(n-1)*n; } return jc;}...原创 2019-03-15 19:50:55 · 963 阅读 · 0 评论 -
多重继承(C++学习笔记 34)
单继承或单基派生: 派生类只有一个基类多重继承或多基派生: 派生类具有两个或多个基类时一、多重继承派生类的声明声明时只需将要继承的多个基类用逗号分隔,声明的一般形式为:class 派生类名:继承方式1 基类名1,··· ···,继承方式n 基类名n{ 派生类新增的数据成员和成员函数} 冒号后面的部分称为基类表,各基类之间用逗号分隔,其中“继承方式 i ”(i=1,2,··· ...原创 2018-12-09 20:42:45 · 723 阅读 · 0 评论 -
应用举例
例 1:建立一个简单的大学管理系统,其中有学生类、职工类、教师类和在职大学生类,类的继承关系如下图:其中,Data_rec 是虚基类,它包含了所有派生类共有的数据成员,职工类 Employee 和学生类 Student 为虚基类 Data_rec 的派生类,教师类 Teacher 为职工类 Employee 的派生类,在职大学生类 E_Student 是职工类 Employee 和学生类 St...原创 2018-12-14 22:06:53 · 933 阅读 · 0 评论 -
调整基类成员在派生类中的访问属性(C++学习笔记 33)
一、同名成员 为了在派生类中使用基类的同名成员,必须在该成员名之前加上基类名和作用域标识符 “ :: ”,格式为:基类名::成员名 派生类可以重新说明与基类成员同名的成员,如果在派生类中定义了与基类成员同名的成员,则称派生类成员覆盖了基类的同名成员。 在面向对象程序设计中,若要在派生类中对基类继承过来的某些函数功能进行扩充和改造,都可以通过这样的覆盖来实现。这种覆盖的方法,是对基类成员...原创 2018-12-09 13:08:54 · 1210 阅读 · 0 评论 -
派生类的构造函数和析构函数(C++学习笔记 32)
引入继承的目的:①派生类继承了基类的成员,实现了原有代码的重用。②实现代码的扩充,只有在派生类中通过添加新的成员,加入新的功能,类的派生才有实际意义。 基类的构造函数和析构函数不能被继承,在派生类中,如果对派生类新增的成员进行初始化,就需要加入派生类的构造函数,同时,对所有从基类继承下来的成员的初始化工作,还是由基类的构造函数完成1、派生类构造函数和析构函数的执行顺序 通常,当创建派...原创 2018-12-09 11:55:06 · 910 阅读 · 0 评论 -
基类与派生类对象之间的赋值兼容关系(C++ 学习笔记 35)
不同类型的数据之间的自动转换和赋值,称为赋值兼容。 在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的 赋值兼容规则 是指在需要基类对象的任何地方,都可以使用 公有派生类的对象 来替代。 通过公有继承,派生类保留了基类中除构造函数、析构函数之外的所有成员,基类的公有或保护成员的访问权限在派生类中全部原样保留了下来,在派生类外可以调用基类的公有成员函数访问基类的私有...原创 2018-12-12 21:43:19 · 4001 阅读 · 0 评论 -
派生类与继承(C++学习笔记 31)
① 继承,就是从先辈处得到属性和行为特征,类的继承就是新的类从已有类那里得到已有的特性。 ② 类的派生,即可看作从已有类产生新类的过程。由已有类产生新类时,新类便包含了已有类的特征,同时也可以加入自己的新特性。 ③ 已有类称为 基类 或 父类 ,产生的新类称为 派生类 或 子类。派生类同样也可以作为基类派生出新的类,这样就形成了类的层次结构。 ④ 类的继承和派生,使程序员无需修改已...原创 2018-12-07 21:56:44 · 451 阅读 · 0 评论 -
习题(针对学习笔记16-30)
1、什么是对象数组?https://blog.csdn.net/aaqian1/article/details/840610492、什么是 this 指针?它的主要作用是什么?https://blog.csdn.net/aaqian1/article/details/841372853、友元函数有什么作用?https://blog.csdn.net/aaqian1/article/det...原创 2018-11-30 21:50:40 · 2427 阅读 · 0 评论 -
静态成员(C++学习笔记 27)
静态成员:为了实现一个类的多个对象之间的数据共享。静态成员包括 静态数据成员 和 静态函数成员。一、静态数据成员在一个类中若将一个数据成员说明为static,这种成员称为静态数据成员。 与一般的数据成员不同,无论建立多少个类的对象,都只有一个静态数据成员的拷贝。从而实现了同一个类的不同对象之间的数据共享。定义静态数据成员的格式:static 数据类型 数据成员名说明:1、静...原创 2018-11-23 22:14:35 · 846 阅读 · 0 评论 -
SetConsoleCursorPosition光标的位置控制 以及 控制台字体颜色控制
例 1:#include<windows.h>int main(){ HANDLE hOut; //新建句柄 hOut hOut=GetStdHandle(STD_OUTPUT_HANDLE); //实例化句柄 hOut COORD pos={0,0}; //COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。 int i; Set...原创 2018-12-22 20:52:05 · 14824 阅读 · 0 评论 -
运算符重载之简介(C++ 学习笔记 36)
运算符重载是通过创建运算符重载函数来实现的。一、在类外定义的运算符重载函数 对于基本的数据类型,C++提供了许多预定义的运算符,如“ +、-、*、/、= ”等。但是若要把类 Complex 的两个对象 com2 和 com2 加在一起,是不能直接通过“ com1+com2 ”来实现的,因为类 Complex 的类型不是基本数据类型,而是用户自定义的数据类型,C++ 无法直接将两个 Com...原创 2019-01-05 20:35:02 · 255 阅读 · 0 评论 -
运算符重载之友元运算符重载
友元可以参考:https://blog.csdn.net/aaqian1/article/details/84427884友元运算符重载函数: 把运算符重载函数定义为某个类的友元函数。1、定义友元运算符重载函数的语法形式(1)在类的内部,定义友元运算符重载函数的格式如下:friend 函数类型 operator 运算符(形参表){ 函数体}(2)友元运算符重载函数也可以在类中声明...原创 2019-01-05 21:08:02 · 9995 阅读 · 0 评论 -
C++ 重载 = 使用引用返回函数值
参考:http://www.cnblogs.com/codingmengmeng/p/5871254.html1、首先是返回对象的情况: #include<iostream> #include<string.h> using namespace std; class String { private: char *str; ...原创 2019-01-17 00:38:39 · 290 阅读 · 0 评论 -
虚函数 1 之虚函数的引入(C++ 学习笔记 38)
①虚函数是重载的另一种表现形式。②是一种动态的重载方式,它提供了一种更为灵活的运行时的多态性机制。③虚函数允许函数调用与函数体之间的联系在运行时才建立,即在运行时才决定如何动作,即所谓的动态联编。一、虚函数的引入例 1:虚函数的引例。...原创 2019-01-20 18:54:30 · 221 阅读 · 0 评论 -
类型转换(C++学习笔记 37)
C++提供两种类型转换方式:隐式类型转换 和 显式类型转换。一、隐式类型转换C++语言不会直接将两个不同类型的值相加,而是先根据类型转换规则设法将运算对象的类型统一后再求值,隐式转换(implicit conversion) 的类型转换是自动执行的,无需程序员的介入。在赋值表达式A=B的情况下,赋值运算符右端B的值需转换为A类型后进行赋值。例如:int x=5,y;y=3.5+x;...原创 2019-01-20 17:22:34 · 305 阅读 · 0 评论 -
虚函数 2 之虚函数的定义
1、虚函数的定义虚函数就是在基类中被关键字 virtual 说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。虚函数的定义是在基类中进行的,它是在基类中在那些需要定义为虚函数的成员函数的声明中冠以关键字 virtual 。定义虚函数的方法如下:virtual 函数类型 函数名(形参表){ ...原创 2019-01-24 23:20:34 · 9819 阅读 · 1 评论 -
下标运算符“[ ]”的重载
在 C++ 中,在重载下标运算符 “[ ]” 时,认为它是一个双目运算符,例如 X[Y] 可以看成:[ ]-----双目运算符;X-----左操作数;Y-----右操作数。其相应的运算符重载函数名为 operator[ ]。 假设 X 是某一个类的对象,类中定义了重载“[ ]”的 operator[ ] 函数,则表达式:X[Y];可被解释为:X.operator[](Y);...原创 2019-01-13 22:56:53 · 6590 阅读 · 3 评论 -
“++” 和 “--” 的重载
自增运算符 “++” 和自减运算符 “–” 放置在变量的前面与后面,其作用是有区别的。 在 C++ 2.1 之前的版本在重载“++”(或“–”)时,不能显式地区分是前缀方式还是后缀方式。也就是说,下面的两条语句是完全相同的:ob++;++ob; 在 C++ 2.1 及以后的版本中,C++ 编译器可以通过在运算符函数参数表中是否插入关键字 int 来区分这两种方式。 对于前缀方...原创 2019-01-11 23:07:06 · 6511 阅读 · 3 评论 -
成员运算符重载函数与友元运算符重载函数的比较
(1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中含有两个参数;对单目运算符而言,成员运算符重载函数参数表中没有参数,而友元运算符重载函数参数表中含有两个参数。(2)双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,但有一种情况,必须使用友元函数:例如,如果将一个复数与一个整数相加,可用成员运算符函数重载 “+”:Complex op...原创 2019-01-06 22:00:36 · 8354 阅读 · 0 评论 -
运算符重载之成员运算符重载
成员运算符重载函数成员运算符重载函数,即把运算符重载函数定义为某个类的成员函数。1、定义成员运算符重载函数的语法形式(1)在类的内部,定义成员运算符重载函数的格式如下:函数类型 operator 运算符(形参表){ 函数体}(2)成员运算符重载函数也可以在类中声明成员函数的原型,在类外定义。在类内,声明成员运算符重载函数原型的格式如下:class X{ 函数类型 operat...原创 2019-01-05 22:30:20 · 4345 阅读 · 0 评论 -
友元(C++学习笔记 28)
在不放弃私有成员(或保护成员)数据安全性的情况下,使得一个普通函数或者类的成员函数可以访问到封装在某一类中的信息(私有、保护成员)。 C++中的友元为数据隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视类内部的秘密,友元是一扇通向私有(保护)成员的后门。友元包括 友元函数 和 友元类一、友元函数既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数...原创 2018-11-24 21:54:56 · 732 阅读 · 0 评论 -
常类型(C++学习笔记 30)
因为程序中各种形式的数据共享,在不同程度上破坏了数据的安全性。引入常类型的目的是,为了保证数据共享又防止数据被改动。常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象成员的值在程序运行期间是不可改变的。本文将从三方面入手:常引用、常对象和常对象成员。一、常引用常引用: 在说明引用时用 const 修饰的引用。如果用 常引用作形参,便不会产生对实参的不希望的更改。...原创 2018-11-25 22:19:33 · 632 阅读 · 0 评论 -
类的组合(C++学习笔记 29)
计算机硬件可构成计算机硬件类。计算机硬件类的数据成员有型号、CPU参数、内存参数、硬盘参数、厂家等。其中的数据成员“ 厂家 ”又是计算机公司类的对象。这样,计算机硬件类的数据成员中就可以有计算机公司类的对象,或者反过来说,计算机公司类的对象又是计算机硬件类的一个数据成员。这样,当生成一个计算机硬件类对象时,其中就嵌套着一个计算机公司类对象。类的组合: 在一个类中内嵌另一个类的对象作为数据成员...原创 2018-11-25 20:30:40 · 799 阅读 · 3 评论 -
习题
1、下面的函数原型声明是否正确?#include&amp;amp;amp;lt;iostream&amp;amp;amp;gt;using namespace std;sum(int ia,int ib);答:正确。原创 2018-11-06 21:20:09 · 1088 阅读 · 0 评论 -
作用域运算符 “::”(C++学习笔记 10)
通常情况下,如果有两个同名变量,一个是全局的,另一个是局部的,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::”,此时::avar代表全局变量,“::”称为作用域运算符。例1: 全局变量和局部变量同名。#include&lt;iostream&gt;using namespace std;int ...原创 2018-11-01 16:46:10 · 1926 阅读 · 2 评论 -
函数的重载(C++学习笔记 9)
在C++中,函数可以重载。即这意味着,只要函数参数的类型不同,或者参数的个数不同,或者两者都有。当两个或者两个以上的函数共用一个函数名时,称为函数的重载。 被重载的函数称为重载函数。重载函数的特点:(1)函数名相同 (2)参数表不同 ( 参数类型参数,个数 ) 在传统C语言中,函数名必须是唯一的,也就是说不允许出现同名的函数,例如,当要求编写求整数、长整型数和双精度数的二次方的函数时,若...原创 2018-11-01 16:30:16 · 653 阅读 · 0 评论 -
const修饰符、const与指针一起使用(C++学习笔记 6)
一、 在C++中使用const修饰符来定义常量。(const来自单词constant,是常量的意思)用法:const 类型 常量名 = 表达式;例如:const int LIMIT = 100;这个常量LIMIT是有类型的,占用存储单元,有地址,可以用指针指向它,但不能修改它。二、对应C中的#define,在C中,习惯使用#define来定义常量例如:#define LIMIT 100...原创 2018-10-30 22:02:26 · 763 阅读 · 0 评论 -
C++的灵活的局部变量声明(C++学习笔记 5)
C语言中根据变量的作用域可以把变量分为两种:局部变量和全局变量。局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,即只有在本函数内才能使用它们,在此函数外是不能使用这些变量的,这样的变量成为局部变量。局部变量的特点:(1)主函数main中定义的变量也是局部变量,只在主函数中有效。(2)一个函数不能使用其他函数中定义的局部变量(3)不同函数可以使用相同名字的局部变量(...原创 2018-10-29 21:43:43 · 2038 阅读 · 0 评论 -
认识C++(C++学习笔记 4)
目前主要参考的书是《C++ Primer》第三版学校上课用的是《C++面向对象程序设计教程》第三版C++的起源C语言的局限性:类型检查机制相对较弱,使得程序中的一些错误不能再编译阶段由编译器检查出来几乎没有支持代码重用的语言结构C语言是面向过程1的编程语言,不能满足运用面向对象2方法开发软件的需要,不适合大型程序,当程序的规模到达一定的程度时,程序员就很难控制程序的复杂性。C...原创 2018-10-29 12:01:50 · 295 阅读 · 0 评论 -
C++的终端输入和输出(C++学习笔记 3)
C++和C的输入输出方面的不同在C中输入和输出,常使用函数scanf和printf。C++除了可以照常使用这两个函数进行输入和输出外,还增加了标准输入流对象cin(念 see-in)和标准输出流对象cout(念 see-out)scanf(&amp;amp;quot;%d&amp;amp;quot;,i);printf(&amp;amp;quot;%f&amp;amp;quot;,f);可以写为:cin&am原创 2018-10-29 10:10:47 · 4313 阅读 · 0 评论 -
C++数组(C++学习笔记 2)
数组(array)数组是相同类型元素的集合。例如,整型数组,字符串数组等。数组是一种顺序容器,它包含单一类型的元素。C++数据类型c++中数据类型分为两种:预定义类型和自定义数据类型。预定义类型:即预先定义的基本内置数据类型。自定义数据类型:允许用户进行数据类型的自定义。自定义的数据类型有结构类型、联合类型、枚举类型、数组类型和类等C++内置数据类型包括 算数类型 和 空类型 。...原创 2018-10-28 20:05:12 · 287 阅读 · 0 评论 -
析构函数(C++学习笔记 19)
一、什么是析构函数?析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于执行一些清理任务,如释放分配给对象的内存空间等。二、析构函数的特点是什么?1、析构函数名与类名相同,但它前面必须加一个波浪号(~)。2、析构函数不返回任何值。在定义析构函数时,是不能说明它的类型的,甚至说明为void类型也不行。3、析构函数没有参数,因此它不能被重载。一个类可以有多个构造函数,但是只能...原创 2018-11-12 22:06:01 · 1747 阅读 · 0 评论 -
引用(C++学习笔记 15)
一、引用的作用建立引用的作用是为变量另起一个名字,变量的引用通常被认为是变量的别名。对变量声明一个引用,并不另外开辟内存单元,变量 i 和引用 j 占用内存的同一位置,当 i 变化时,j 也随之变化, 反之亦然。二、引用的格式类型 &amp;amp;amp;引用名=已定义的变量名;例如:声明一个 j 作为 i 的别名。int i=5;int &amp;amp;amp;j=i; //声明j是一个整型变量的引用,用整...原创 2018-11-05 18:27:21 · 3175 阅读 · 7 评论 -
对象数组(C++学习笔记 20)
一、对象数组的定义所谓对象数组,指每一个数组元素都是对象的数组,即若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。定义一个一维数组的格式如下:类名 数组名[下标表达式]与基本数据类型的数组一样,在使用对象数组时也只能访问单个数组元素,其一般形式为:数组名[下标].成员名在建立数组时,同样要调用构造函数。有几个数组元...原创 2018-11-14 10:29:15 · 27852 阅读 · 5 评论 -
在命令行执行C++程序带来的思考(C++学习笔记 26)
由于在使用Dev-C++执行代码时出现了非语法错误,所以打算用其他编辑器试试。之前没有用过notepad++,本篇算是notepad++ 的学习使用笔记。 我下载的是notepad++ v7.5.1,从官网上下载即可,安装时一直点下一步,只有其中一步需选择创建快捷方式(即“Create Shortcut on Desktop”)。...原创 2018-11-19 17:54:07 · 269 阅读 · 0 评论 -
拷贝构造函数(C++学习笔记 25)
一、拷贝构造函数的基本概念拷贝构造函数是一种特殊的构造函数。其形参是本类对象的引用。拷贝构造函数的作用:在建立一个新对象时,使用一个已经存在的对象去初始化这个新对象。例如:Point p2(p1);其作用是,在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中就要调用拷贝构造函数。拷贝构造函数的特点:1、因为该函数也是一种构造函数,所以其函数名与类名相同,并...原创 2018-11-19 17:41:44 · 804 阅读 · 0 评论 -
向函数传递对象(C++学习笔记 24)
一、使用对象作为函数参数在向函数传递对象时,是通过 “ 传值调用 ” 传递给函数的,即单向传递,只由实参传给形参,而不能由形参传回来给实参。因此函数中对对象的任何修改均不影响调用该函数的对象(实参)本身。例 1 :使用对象作为函数参数#include&lt;iostream&gt;using namespace std;class Tr{ public: Tr(int n){ ...原创 2018-11-16 21:56:47 · 2518 阅读 · 0 评论 -
String类(C++学习笔记 23)
C++支持两种类型的字符串:①包括一个结束符‘ \0 ’(即以NULL 结束)的字符数组 ②字符串类string可以在表达式中把string类对象和以 ‘ \0 ’ 结束的字符串混在一起使用,例如可以把一个以‘ \0 ’结束的字符串赋给一个string 类对象使用string类必须在程序的开始包括头文件string,即要有语句:#include&amp;amp;amp;amp;lt; string&amp;amp;amp;amp;gt;string 类...原创 2018-11-16 21:17:30 · 257 阅读 · 0 评论 -
this 指针(C++学习笔记 22)
当定义了一个类的若干对象后,系统会为每一个对象分配存储空间。如果一个类包含了数据成员和成员函数,就要分别为数据和函数的代码分配存储空间。事实上,给对象赋值就是给对象的数据成员赋值,不同对象的存储单元中存放的数据值通常是不同的,而不同对象的函数代码是相同的,不论调用哪一个对象的成员函数,其实调用的都是相同内容的代码。每个对象的存储空间都只是该对象的数据成员所占用的存储空间,而不...原创 2018-11-16 12:41:18 · 291 阅读 · 0 评论 -
对象指针(C++学习笔记 21)
对象指针就是用于存放对象地址的变量。声明对象指针的一般语法形式:类名 *对象指针名1、用指针访问单个对象成员在一般情况下,用点运算符 “ . ” 来访问对象成员,当用指向对象的指针来访问对象成员时,就要用 “ -> ” 操作符。例 1: 对象指针的使用#include<iostream>using namespace std;class exe{ public...原创 2018-11-16 11:21:46 · 938 阅读 · 0 评论