
C++
文章平均质量分 64
c
J0hnson666
这里是Johnson666,关注WeiXinGongZhongHao:挽风安全。各大SRC都有高质量漏洞产出,数家SRC排名前十,单个漏洞获得奖金数万元;各大平台都有写过高质量文章;打过几次HW红队,均排名靠前;打过CTF但是很菜。
展开
-
C++——函数模板
函数模板的定义函数模板定义的一般形式如下:template<类型形式参数表> 返回类型 函数名(形式参数表){ //函数体}template为关键字,表示定义一个模板,尖括号<>表示模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数。上述代码中定义的模板使用的是模板类型参数,模板类型参数使用关键字class或typedef开始,其后是一个用户定义的合法标识符。模板非类型参数与普通参数定义相同,通常为一个常数。可以将声明函数模板分成templ原创 2021-06-29 15:31:14 · 466 阅读 · 0 评论 -
C++——虚函数
虚函数的引入同一个类中,不能定义两个相同的函数,即名字相同、参数相同的函数。但是在类的继承层次结构中,不同层次的类中可以出现名字相同、参数相同而功能不同的函数。下面通过一个例子来讲解动态多态性是如何实现的,虚函数是如何实现的。例子:建立一个基类Person类,派生类Student类,它们都有display这个同名的函数。#include <iostream>#include <string>using namespace std; class Person{ pub原创 2021-06-26 11:33:01 · 1463 阅读 · 0 评论 -
C++——类模板
概念C++程序主要是由类和类的成员函数组成,编程人员需要设计各种类和它们的成员函数,然后将它们按一定的程序结构组织起来。由于现实中某些事物之间存在一定的相似性,对这些事物设计的类或者类成员函数之间也会表现出相似性,编程人员就需要编写多个形式和功能相似的函数,这造成了程序冗余的问题。C++通过引入类模板的概念解决了上述问题。利用C++的类模板,能够快速建立具有类型安全的类库集合,它能够显著提高编程效率,并提高软件的通用性和灵活性。比如,声明一个类进行数据的初始化和求和操作,成员变量可能存在整型、浮点型、字原创 2021-06-25 22:40:39 · 353 阅读 · 2 评论 -
C++——友元
写在前面类具有封装性,类中的私有数据只有通过该类的成员函数才可以访问。如果在程序中需要访问类的私有成员,就必须通过对象来调用类的成员函数,但是频繁调用成员函数将影响程序运行效率。为解决上述问题,C++提供一种友元机制,友元可以不通过调用成员函数就可以直接访问类的私有数据,以提高程序运行效率。友元机制在数据封装这堵不透明的墙上开了一个小孔,方便了类外对象进行数据的访问,但是它破坏了封装性,因此友元的使用也要慎重。友元可以是一个普通函数,可以是一个类的成员函数,也可以是一个类。友元函数普通函数声明为友元原创 2021-06-19 17:26:52 · 320 阅读 · 0 评论 -
C++——多重继承
多重继承派生类的构造函数多重继承派生类的构造函数形式与单继承时的构造函数形式基本相同,只是在初始化表中包含多个基类构造函数,各基类的排列顺序任意。多重继承派生类的构造函数执行顺序为:先调用基类的构造函数,再执行派生类构造函数。调用基类构造函数的顺序是声明派生类时基类出现的顺序。多重继承的应用:#include <iostream>using namespace std;class BaseA{//基类Apublic: BaseA(int a): base_a(a) {原创 2021-06-18 14:05:44 · 511 阅读 · 1 评论 -
C++——静态成员
静态成员变量在类的声明和对象的定义中讲到类包含属性和行为。属性也就是成员变量,它们属于每个对象所有,但对应的数值可以不同。例如学生类中每一个学生都有各自的姓名、学号、性别,这样的成员变量可以称为非静态成员变量。如果某个属性为整个类所有,而不属于任何一个具体的对象,这时就可以用静态成员变量来定义。使用静态成员变量可以节省内存,因为它是所有对象所共有的。因此,对于多个对象来说,静态成员变量只存储一次,它对每个对象都一样,只要对其进行更新,所有对象都会访问到更新后的变量值。例子:#include<s原创 2021-06-17 14:41:37 · 214 阅读 · 0 评论 -
C++——常对象成员和常对象
前言静态成员的使用让类的对象之间能够共享数据,友元的使用破坏了类的封装性,却给了类的“朋友”对本类成员访问的特权。但是,有时候要求数据在能共享的前提下还不能被修改,也就是要实现数据的保护。常变量就是使程序运行过程中值不能被改变,同样也可以让对象具有这样的特性。常成员变量在类的成员定义中,使用修饰符const说明的成员变量称为常成员变量。常成员变量必须初始化,并且不能被修改,它是通过构造函数的成员初始化列表进行初始化的。例子:常成员变量的应用:#include<iostream>u原创 2021-06-16 22:04:31 · 616 阅读 · 1 评论 -
C++——引用
引用的介绍在C++11标准中提出了左值引用的概念,如果不加特殊声明,一般认为引用指的都是左值引用。引用实际上是一种隐式指针,它为对象建立一个别名,通过操作符&来实现。&是取地址操作符,通过它可以获得地址。引用的形式如下:数据类型 & 表达式;例如:int a=10;int & ra=a;ra=2;定义了一个引用变量ra,它是变量a的别名。对ra的操作与对a的操作完全一样。ra=2把2赋给了a,&ra返回a的地址。执行ra=2和a=2等价。使用引用原创 2021-06-16 14:46:16 · 294 阅读 · 0 评论 -
C++友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字friend例子:代码:#include<iostream>using namespace std;class Box原创 2021-06-15 17:28:31 · 165 阅读 · 0 评论 -
C++——抽象类之纯虚函数和实现抽象类中的成员函数
包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数。抽象类只能作为基类派生出的新的子类,而不能在程序中被实例化(即不能说明抽象类的对象),但是可以使用指向抽象类的指针。像在开发程序的过程中,并不是所有代码都是由软件构造师自己写的,有时候需要调用库函数,有时候分给别人来写。一名软件构造师可以通过纯虚函数建立接口,然后让程序员填写代码实现接口,而自己主要负责建立抽象类。纯虚函数纯虚函数是指被标明为不具体实现的虚成员函数,它不具备函数的功能。许多情况下,在基类中不能给虚函数一个有意义的定义,这时可原创 2021-06-14 21:59:47 · 2343 阅读 · 0 评论 -
C++——多态之虚函数与虚继承
利用虚函数实现动态绑定多态主要体现在虚函数上,只要有虚函数存在,对象类型就会在程序运行时动态绑定。动态绑定的实现方法是定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象,通过该指针变量调用此虚函数。例子:#include<iostream>using namespace std;class Employee{public: int id; char name[128]; char depart[128]; Employee() { memset原创 2021-06-14 16:58:22 · 347 阅读 · 0 评论 -
C++——虚函数和抽象类的使用方法
编程题1.虚函数的使用代码:#include<iostream>using namespace std;class X{private:int Xa,Xb;public:X(){Xa=0;Xb=0;}virtual void display();virtual ~ X(){cout<<"析构X"<<endl;}};void X::display(){cout<<"X的值为:("<<Xa<<","<<原创 2021-06-10 14:46:32 · 917 阅读 · 0 评论 -
C++——运算符重载为成员函数与非成员函数的区别
运算符重载为成员函数运算符重载为成员函数可以使函数方便地访问本类的成员变量,调用时通过该类的某个对象来操作运算符重载函数。由于成员函数是类的一部分,调用成员函数会传递this指针,因此类对象自身即为一个参数。加法运算为双目运算符,若用oprd1表示左操作数,oprd2表示右操作数,则oprd1为对象本身的数据,即由this指针指向对象的成员,而oprd2通过运算符重载函数的参数提供,表达式可以写成oprd1+oprd2,相当于函数调用oprd1.operator+(oprd2)。单目运算符如取地址运算符原创 2021-06-07 15:30:42 · 4408 阅读 · 0 评论 -
C++——类的多态性(一)
目的掌握运算符重载的使用方法内容编程题1.(1)以成员函数的方式,实现运算符“+”的重载,程序运行结果保持不变; (2)以友元函数的方式,实现运算符“+”的重载,程序运行结果保持不变。代码:(1)#include<iostream.h>class Box{public: Box(){} Box(int l,int b, int h) { length=l; breadth=b; height=h; }原创 2021-06-03 21:29:05 · 1453 阅读 · 10 评论 -
C++——运算符重载方法与使用场合
运算符重载方法为了重载运算符,必须定义一个函数,并告诉编译器,遇到这个运算符就调用该函数,由这个函数来完成该运算符应该完成的操作。这种函数称为运算符重载函数,也就是说,运算符重载是通过定义函数来实现的。重载运算符的函数一般格式如下:函数类型 operator 运算符名称(形参列表){对运算符的重载处理}例子:#include<iostream>using namespace std;class Time{private: int hour; int minute;原创 2021-06-02 17:43:08 · 1492 阅读 · 1 评论 -
C++程序设计——继承与派生(二)
编程题1.简单继承方式派生类构造函数的使用代码:运行结果:2.有子对象的派生类构造函数的使用代码:运行结果:3.观察派生类构造函数与析构函数的调用顺序运行结果:4.掌握单继承方式、多重继承方式下,派生类构造函数的使用运行结果:5.按要求完成下面的编程(1)1)建立一个基类Account,成员变量包含账号accnumber、姓名accname。2)从Account类派生出CreditAccount类,添加成员变量信用额度credit。3)Account类包括默认原创 2021-05-27 22:41:32 · 1763 阅读 · 11 评论 -
C++——派生类的构造函数与析构函数
1.简单的派生类的构造函数简单的派生类只有一个基类,而且只有一级派生。简单派生类的构造函数一般形式为:派生类构造函数名(总参数列表):基类名(参数列表){ 派生类中新增成员变量初始化语句}下面通过一个例子来说明代码:#include<iostream>#include<string>using namespace std;class Clock{public: Clock(int h,int m,int s) { hour = h;原创 2021-05-25 22:46:00 · 1567 阅读 · 0 评论 -
关于C++ 类中数据成员在定义时初始化问题
很多人在习惯上在声明变量时就赋上初值,但对于c++类中的数据成员能否这样做呢?如下:class b{ int x=0; int y=1; //...}; 其实在早些的版本是不能的,早先的版本一般都是借助构造函数或者成员函数等等来实现class b{public: b() { x=0; y=1; } void setNum(int a,int b) { x=a; y=b; }//...private: int x; int y;}; 但是c++1转载 2021-05-21 22:41:20 · 799 阅读 · 0 评论 -
C++——内联函数与静态成员
内联成员函数在定义函数时,可以使用inline关键字将函数定义为内联函数。在定义类的成员函数时,也可以使用inline关键字将成员函数定义为内联成员函数。其实对于成员函数来说,如果其定义是在类体中,即使没有使用inline关键字,该成员函数也被认为是内联成员函数。例如:#include<iostream>using namespace std;class User{private: char username[100]; char password[100];public:原创 2021-05-21 22:32:21 · 997 阅读 · 3 评论 -
c++类中对数据成员进行初始化和赋值的区别
在c++中定义一个类 ,对于构造函数 我们经常是这么写的:这种写法虽然是合法的但比较草率在构造函数 test(int n_x , int n_y)中 , 我们这样实际上不是对数据成员进行初始化 , 而是进行赋值。正确的是初始化应该是这样的:虽然大部分时候赋值和初始化是没有区别的 , 但是构造函数的初始化值有时必不可少,例如:上面代码的红色部分就是错误的 , 因为const 和 引用类型的数据成员的唯一机会就是通过构造函数进行初始化值。因此,正确形式:...转载 2021-05-21 21:31:04 · 264 阅读 · 0 评论 -
C++——友元
友元概述在讲述类的内容时说明了隐藏数据成员的好处,但是有些时候,类会允许有一些特殊的函数直接读写其私有数据成员。使用friend关键字可以让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。这既可以保持数据的私有性,又能够使特定的类或函数直接访问私有数据。有时候,普通函数需要直接访问一个类的保护或私有数据成员。如果没有友元机制,则只能将类的数据成员声明为公共的,从而任何函数都可以无约束地访问它。普通函数需要直接访问类的保护或私有数据成员的原因主要是为了提高效率。例如,没有使用友元函数的情况原创 2021-05-21 19:07:11 · 350 阅读 · 2 评论 -
C++程序设计——继承与派生(一)
实验目的掌握const对象的使用,类的继承与派生的使用方法。编程题1.常成员及常对象的使用代码:#include<iostream>#include<string>using namespace std;class Student{public: Student(string na,int nu):num(nu) { name=na; }void Show(){ cout<<"name:"<<name<<"num:原创 2021-05-21 11:16:03 · 994 阅读 · 0 评论 -
C++——构造函数与析构函数的恩怨情仇
构造函数在类的实例进入其作用域时,也就是建立一个对象,构造函数就会被调用,那么构造函数的作用是什么呢?当建立一个对象时,常常需要做某些初始化的工作,例如对数据成员进行赋值设置类的属性,而这些操作刚好放在构造函数中完成。类的构造方法如下:class Person{ public: Person(); //构造函数 int index; int getIndex();};Persn::Person(){ index = 10;}Person()是默原创 2021-05-20 22:45:50 · 238 阅读 · 0 评论 -
C++——继承中的构造函数
1.继承中的构造函数访问顺序由于父类和子类中都有构造函数和析构函数,那么子类对象在创建时父类先进行构造,还是子类先进行构造呢?同样在子类对象释放时,是父类先进行释放,还是子类先进行释放呢?这都有个先后顺序的问题。答案是当从父类派生一个子类并声明一个子类的对象时,它将先调用父类的构造函数,然后调用当前类的构造函数来创建对象;在释放子类对象时,先调用的是当前类的析构函数,然后是父类的析构函数。下面来个例子:#include<iostream>using namespace std;clas原创 2021-05-20 20:58:14 · 1177 阅读 · 4 评论 -
C++——指向常对象的指针与指向对象的常指针
写在前面如果一个变量已经被声明成常变量,则只能用指向常变量的指针变量指向它,而不能用一般的(非const型的)指针变量指向它。Parent * const j; //指向对象的常指针变量 j的值(j的指向)不能修改const Parent *j; //指向常对象的指针变量,指针j指向的类对象的值不能通过指针j来修改,要修改的话得用”对象.数据成员=值“这样来修改例子:报错代码:#include<iostream>using namespace std;class Time原创 2021-05-20 18:15:41 · 706 阅读 · 0 评论 -
C++——this指针
对于类的非静态成员,每一个对象都有自己的一份拷贝,即每个对象都有自己的数据成员,不过成员函数却是每个对象共享的。那么调用共享的成员函数是如何找到自己的数据成员的呢。答案就是通过类中隐藏的this指针。下面通过几个例子来说明this指针的作用。例如,每一个对象都有自己的一份拷贝。#include<iostream>using namespace std;class CBook{public: int Pages; void outputPages() { cout <原创 2021-05-20 14:03:28 · 251 阅读 · 0 评论 -
C++——类的继承访问学习
1、子类是否可以直接访问父类的私用成员吗?从面向对象理论角度来看:子类拥有父类的一切属性和行为,也就是说,子类能够直接访问父类的私有成员。从c++的语法角度看:外界不能直接访问类的private成员,也就是说,子类不能直接访问父类的私用成员。代码:#include<iostream>#include<string>using namespace std;class Parent{ int Jo;public: void p() { Jo = 100;原创 2021-05-19 21:40:38 · 1752 阅读 · 0 评论 -
C++——继承
1.定义一个父类,写个子类继承并输出对象的面积代码:#include<iostream>using namespace std;class Shape{public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; }protected: int width; int height;};class Rectangle: public Shape{publ原创 2021-05-19 17:13:36 · 482 阅读 · 2 评论 -
C++——类静态成员和友元函数
编程题1.静态成员的使用代码:#include<iostream>using namespace std;class Time{public: static int totalTime; Time(int a,int b,int c); void ShowTime(){ cout<<"hour:"<<hour<<" minute:"<<minute<<" second:"<<second<<原创 2021-05-15 22:55:42 · 843 阅读 · 0 评论 -
C++——掌握类构造函数与析构函数的使用方法(二)
1.分别使用无参和有参的构造函数给成员变量赋值(row=10,col=10),并输出。代码:#include<iostream>using namespace std;class Table{public: Table(){row = 10; col = 10;} Table(int a, int b):row(a), col(b){}; ~Table(){}; void show();private: int row; int col;};void Table::原创 2021-05-10 22:47:29 · 295 阅读 · 0 评论 -
C++——类构造函数与析构函数的使用方法
1.完成下面程序的功能:(1)创建无参的构造函数,为成员变量提供默认值(2021,4,26)(2)创建有参的构造函数,为成员变量赋初值;(3)将有参的构造函数修改为用参数初始化列表赋初值;(4)创建析构函数,输出析构对象的日期;(5)使用无参的构造函数创建类对象MyDate1,判断当前年是否为闰年,并打印输出日期;(6)使用有参的构造函数创建类对象MyDate2,初值为(2024,4,26),判断当前年是否为闰年,并打印输出日期;(7)使用new动态创建类对象MyDate3,初值为(2040,原创 2021-05-08 13:56:23 · 480 阅读 · 1 评论 -
C++——类和对象(一)
1.改错题:修改以下程序,并给出正确代码及运行结果(1)给成员变量赋值,并输出。#include<iostream>using namespace std;class Table{public: int row; int col; void show() { cout<<"row:"<<row<<endl; cout<<"col:"<<col<<endl; }};int main()原创 2021-04-22 16:07:32 · 1273 阅读 · 9 评论 -
C++习题六——函数
1.改错题:修改以下程序,并给出正确代码及运行结果(1)键盘输入n,求1+2+3…+n的和。代码及结果:(2)将一维数组按升序排列。代码:结果:2.在VC++6.0中调试并运行以下的程序,给出运行结果(1)程序1:理解实参和形参同名时,按对应位置传递值。(2)程序2:掌握返回指针值函数的使用方法。(3)程序3:掌握内联函数的使用方法。(4)程序4:掌握函数重载的使用方法。(5)程序5:掌握全局变量与局部变量的使用方法。3.在VC++6.0中编写以下C原创 2021-04-13 22:59:27 · 2242 阅读 · 0 评论 -
C++数组与指针的使用 (扩展)
1.阅读以下程序,并给出横线处的正确代码(1)程序的运行结果为:则横线处的代码应为: i == 3 。补充后的代码:(2)程序的运行结果为:则横线处的代码应为: c[i][j] = a[i][j] + b[i][j]; 补充后的代码:(3)程序的运行结果为:则横线处的代码应为: *p = ‘#’;补充后的代码:(4)程序的运行结果为:则横线处的代码应为: p = a; 或者 p = &a[0]; 补充后的代码:或者2.编写C++程序,并给出代码及运原创 2021-04-13 21:17:31 · 296 阅读 · 0 评论 -
C++习题三——指针与数组
1.改错题修改以下程序,并给出正确代码及运行结果(截图):(1)键盘输入n个整数,并逆序输出。代码:结果:(2)输出打印二维数组中的值。代码:结果:(3)利用指针p将变量a的值修改为7。代码:结果:(4)利用指针p输出二维数组中的元素。结果:代码:2.请在VC++6.0中编写以下C++程序,并给出代码及运行结果(截图)(1) 从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。代码:原创 2021-04-01 14:08:46 · 2801 阅读 · 0 评论 -
C++习题一
1.改错题:修改以下程序,并给出正确代码及运行结果(1)从键盘输入a和b的值,并输出两数的和。代码:#include <iostream>using namespace std;int main(){ int a, b; cout << "please input the numers a b:"; cin >> a >> b; cout << "a+b:" << a+b <<endl; retur原创 2021-03-18 09:37:24 · 1162 阅读 · 0 评论 -
C++习题二——字符串变量;内联函数;动态分配内存空间
1.改错题修改以下程序,并给出正确代码及运行结果(截图):(1)输出3,5,7中的最小值错误代码:修改结果:(2)求一个数的平方,并输出打印错误代码:修改结果:(3)函数重载求解两数之和错误代码:修改结果:2.请在VC++6.0中调试并运行以下的程序,给出运行结果(截图)(1)程序1:掌握const的使用方法,可以保证数组carray1的值不被破坏。代码:结果:(2)程序2:观察输出,引用与所引用的目标对象使用相同的存储空间代码:结果:3.请在VC+原创 2021-03-24 15:08:08 · 702 阅读 · 0 评论