
c++
yzhang_1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多文件-自动售票机的例子
main.cpp#include "TicketMachine.h"int main(){ TicketMachine ti; ti.showmoney(); ti.insertmoney(100); ti.showtotal(); return 0;}TicketMachine.cpp#include "TicketMachine.h"#include <iostream>using namespace std;TicketMachi原创 2020-10-17 09:50:03 · 285 阅读 · 0 评论 -
泛型编程-模板(了解)
模板:模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计template <class T>void swap(T& x,T& y){ T temp = x; x =y; t= temp;}//调用swap<int>(num1, num2);类模板一个vector的例子,里面的函数,每个都是函数模板。定义如下template <class T> class Stack {publi原创 2020-10-17 09:49:45 · 192 阅读 · 0 评论 -
STL-set自定义排序及其遍历
#include <iostream>#include <set>#include <string>using namespace std;struct student{ int id; string name;};struct comp//起比较作用的结构体{ bool operator()(const student &a, const student &b) { return a.nam原创 2020-10-17 09:49:20 · 1321 阅读 · 0 评论 -
STL-常用容器
vectorvector(向量):是一种顺序容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。vector初始化vector操作vector<int> v1;v1.push_back() //在数组的最后添加一个数据v1.pop_back() //去掉数组的最后一个数据v1.fro原创 2020-10-17 09:48:47 · 232 阅读 · 0 评论 -
OOP-子类父类关系
构造一个子类时,父类的构造函数会被自动调用通过子类的构造函数来初始化父类的构造函数会先构造父类的对象,再构造子类析构则是先析构子类。#include <iostream>using namespace std;class A{public: A() { cout << "A::A()" << endl; } ~A() { cout << "A::~A()" <<原创 2020-10-17 09:48:26 · 185 阅读 · 0 评论 -
OOP-运算符重载原型
#include <iostream>using namespace std;//没有temp变量的都可以加引用,有temp的,如果加引用必须加static//如果是可以连用(如=),不改变其意思必须加引用//istream重载时,不能加const//类型转换重载时,不能加返回值//输入输出重载必须为友元class A{ int num; int *p;public: A(int aa) : num(aa) { p = ne原创 2020-10-17 09:48:09 · 336 阅读 · 0 评论 -
OOP-运算符重载
运算符重载:即写函数去改变运算符的功能以下的运算符都可以被重载双目算术运算符+ (加),-(减),*(乘),/(除),% (取模)关系运算符==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)逻辑运算符||(逻辑或),&&(逻辑与),!(逻辑非)单目运算符+ (正),-(负),*(指针),&(取地址)自增自减运算符++(自增),–(自减)位运算符| (按位或),&原创 2020-10-17 09:47:44 · 471 阅读 · 0 评论 -
OOP-向上造型
向上造型指将子类的对象当做是父类对象来看待定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。//manager是从employee继承过来的manager pete("pete","444-55-66666");employee* ep = &pete;//向上引用employee& er = pete;//向上引用子类中父类的东西在子类自己的东西的前面,子类的对象可以当父类的对象来使用以下代码说明了当一个类继承了另个类的时候它的内原创 2020-10-17 09:47:26 · 142 阅读 · 0 评论 -
OOP-拷贝构造
拷贝构造函数:复制构造函数是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用复制构造函数。当该类型的对象传递给函数或从函数返回该类型的对象时,将隐式调用复制构造函数。成员的拷贝,有指针的话,就会有指针拷贝,两个指针指在同一片地址,引用同理。T::T(const T&);两种拷贝构造的方式#include <iostream>using namespace std;class原创 2020-10-17 09:47:07 · 306 阅读 · 0 评论 -
OOP-继承
用存在的类构造出新的类比如说学生从人继承的关系如下被继承的类:基类,超类,父类来继承的类:派生类,子类表示X继承A类class X : public A(){ }class A{public: A() : i(0) { cout << "A:A()" << endl; } ~A() { cout << "A:~A()" << endl原创 2020-10-17 09:46:46 · 243 阅读 · 0 评论 -
OOP-访问限制
public公用的,任何人都可以访问private私有的,类的成员函数可以访问,同一个类的对象可以互相访问private#include <iostream>using namespace std;class A{private: int i; int *p;public: A() { p = 0; cout << "A::A()" << endl; } ~A().原创 2020-10-16 16:48:44 · 234 阅读 · 0 评论 -
OOP-构造和析构
构造函数:为了用类的时候直接初始化,其名字必须和类的名字一样,在类被用的时候(创建对象),该函数直接被调用,没有返回值。class X{ int i;public: X(); //构造函数}构造函数允许重载,所以在实例化对象的时候,可以根据传入参数的不同选择不同的构造函数,但是只会执行其中的一个,具体执行哪一个,按照传入的参数。具体如下:#include <iostream>using namespace std;class ABC{ int d.原创 2020-10-16 16:48:25 · 597 阅读 · 0 评论 -
OOP-多态性
C++的多态性简单的说:允许将子类类型的指针赋值给父类类型的指针(一个接口,多种方法)。C++支持两种多态性:编译时多态性(静态多态):通过重载函数实现运行时多态性(动态多态):通过虚函数实现。在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数以下主要讲运行时多态最常见的用法就是声明基类的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的原创 2020-10-16 16:48:05 · 402 阅读 · 0 评论 -
OOP-对象组合
对象组合:把已有对象组合起来成员对象:一类的成员变量是另一个类的对象封闭类:包含成员对象的类#include <stdio.h>#include <iostream>using namespace std;class ctyre{private: int radius; int width;public: ctyre(int r, int w) : radius(r), width(w) {}};class cengine{};c原创 2020-10-16 16:47:50 · 328 阅读 · 0 评论 -
OOP-对象初始化
空间是进了大括号就分配了,构造函数是到了那行才运行int a[5] = {1, 2, 3, 4, 5};int b[6] = {5} //b[0] = 5 其他为0struct X{ int i; char c; float f;};X x1 = {1, 'c', 2.2}; //结构体的初始化X x2[3] = {{1, 'a', 1.1}, {2, 'b', 2.2}};struct Y{ float f; int i; Y(int a)原创 2020-10-16 16:47:35 · 200 阅读 · 0 评论 -
OOP-初始化列表
初始化变量构造函数:成员变量(初始值)struct foo{ string name; int id; foo(string s, int i):name(s), id(i){}; // 初始化列表};如果是这样,构造函数会在初始化之前执行[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZOGS0LZ-1602588805200)(evernotecid://BDA4AB04-8A66-4642-AD7F-A41B5A94C267/appyinxi.原创 2020-10-16 16:47:17 · 215 阅读 · 0 评论 -
基础知识-头文件
定义一个类用分离的.h和.cpp定义一个类.h:类的声明和函数的原型,用函数或者类的和定义函数或者类的时候先include该头文件.cpp:函数的定义#:编译预处理一个.cpp文件就是一个编译单元一个头文件里面只能放声明什么是声明外部变量 如( extern int a,int a称为定义性声明)函数原型类和结构体的声明#include#include “” 在当前目录寻找#include <>在系统目录寻找...原创 2020-10-16 16:47:00 · 189 阅读 · 0 评论 -
基础知识-异常处理
const用于定义常量const 代表改表不可修改,只能一开始赋初值必须要初始化,除非加externconst int class_size = 12;int finalGrade[class_size];int x;cin >> x;const int size = x;double classAverage[size];修饰指针如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰.原创 2020-10-16 16:46:20 · 88 阅读 · 0 评论 -
基础知识-c++中不确定参数的函数的使用
#include <cstdio>#include <list>#include <string>#include <cstdarg> //必须要加的头文件using namespace std; int f(int a...){ va_list ap; va_start(ap, a); //va_start函数将参数ap设置为可变参数列表的第一个参数 for(int i = 0; i < a; i++)原创 2020-10-16 16:46:37 · 313 阅读 · 0 评论 -
基础知识-explicit关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)explicit关键字的作用就是防止类构造函数的隐式自动转换.class CExample { public: CExample(void); public: ~CExample(void); public: int m_iFirst;原创 2020-10-16 16:45:59 · 5368 阅读 · 7 评论 -
基础知识-this指针
this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换。这样理解类,就是原创 2020-10-13 19:26:33 · 136 阅读 · 0 评论 -
基础知识-new & delete
动态制造对象new: 动态内存分配,制造一个对象当我们使用关键字new在堆上动态创建一个对象A时,比如 A* p = new A(),它实际上做了三件事:向堆上申请一块内存空间(做够容纳对象A大小的数据)(operator new)调用构造函数 (调用A的构造函数(如果A有的话))(placement new)返回正确的指针delete:收回该对象当我们delete的时候也是如此,比如我们delete p的时候,其行为如下:定位到指针p所指向的内存空间,然后根据其类型,调用其自带的析构原创 2020-10-13 19:25:24 · 115 阅读 · 0 评论 -
基础知识-const的作用
const用于定义常量const 代表改表不可修改,只能一开始赋初值必须要初始化,除非加externconst int class_size = 12;int finalGrade[class_size];int x;cin >> x;const int size = x;double classAverage[size];修饰指针如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰.原创 2020-10-13 19:24:28 · 442 阅读 · 0 评论 -
基础知识-函数缺省参数值
定义:C++在声明函数原型时,可为一个或多个参数指定缺省参数值,以后调用此函数,若省略其中某一参数,C++自动地以缺省值作为相应参数的值。例如函数原型说明为:int add(int x=15,float y=20.56);当进行函数调用时,可以有以下几种形式1) add(100,79.8); // x=100,y=79.82) add(25); // x=25,y=20.563) add(); // x=15,y=20.56特别说明:只能在声明时设置默认参数原创 2020-10-13 19:18:47 · 2076 阅读 · 0 评论 -
基础知识-静态对象
静态数据成员静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。静态数据成员在定义或说明时前面加关键字static。静态变量的定义静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:数据类型 类名::静态数据成员名 = 值; //静态变量的初始化静态全局变量:只能在这个文件中可以访问(c中)静态的本地变量:持久的静态的成员变量:在所有对象共享静态的成员函数:在所有对原创 2020-10-13 19:14:29 · 1273 阅读 · 0 评论 -
基础知识-内联函数
内联函数:当内联函数收到编译器的指示时,即可发生内联:编译器将使用函数的定义体来替代函数调用语句,这种替代行为发生在编译阶段而非程序运行阶段。把函数代码迁入调入的地方,但是保持函数的独立性,为了提高效率编译器在编译文件时,同一时间只能看见一个代码inline函数定义就是声明,必须放在.h文件以空间换时间如果函数是递归的或者是很复杂的,编译器可能不内联如果在class中的函数直接定义,则这里面的函数都被作为内联函数使用C++ inline函数是一种“用于实现的关键字”,而不是一种“用于声明的关原创 2020-10-13 19:13:06 · 388 阅读 · 0 评论 -
基础知识-引用
引用说明:引用的时候需要在定义的时候初始化&在此不是求地址运算,而是起标识作用。类型标识符是指目标变量的类型。声明引用时,必须同时对其进行初始化。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元。1、引用作为参数char c;char *p = &c;//指针char& r = c;//引用r是c的别名,用r和用f是一样的在参数表里,或者作为成员变量可以不初始化,但是如果是本地变量或者原创 2020-10-13 19:11:13 · 173 阅读 · 0 评论 -
基础知识-::的作用
作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。如:A,B表示两个类,在A,B中都有成员member。那么A::member就表示类A中的成员member,B::member就表示类B中的成员member。全局作用域符号当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如:char zhou; //全局变量void sleep() { char zhou; //局部变量char(局部变量..原创 2020-10-13 19:06:55 · 2386 阅读 · 0 评论 -
基础知识-面向对象基本原理
什么是对象变量就是一个对象对象 = 属性 + 方法面向对象基本原理类和对象对象就是一个东西(实体),类就是一系列东西归的类(概念)。oop的五条原则一切东西都是对象程序就是很多对象构成实现特定功能每一个对象有由其他对象组成的它自己的内存。每个对象有个类型(先有类)。一个类型的所有的对象都能接收同样的东西,所有可以接收相同东西的对象可以归成一个类型。...原创 2020-10-13 19:05:20 · 1457 阅读 · 0 评论