C++笔记
石院情歌小王子
所有博文仅为日后复习方便查找,无其他用途,部分非原创,因标记转载较繁琐,所以标记为原创,无他意
展开
-
智能指针
https://blog.csdn.net/qq_33185566/article/details/104703640原创 2020-03-06 20:32:20 · 119 阅读 · 0 评论 -
移动构造函数
https://www.cnblogs.com/jingliang10101/p/9796549.html原创 2020-02-27 17:27:04 · 109 阅读 · 0 评论 -
C/C++文件操作——输入输出流
https://blog.csdn.net/W614171629/article/details/80898019转载 2019-12-11 17:42:42 · 113 阅读 · 0 评论 -
函数指针做函数参数好处
#include <stdio.h>#include <stdlib.h>int myAdd(int a,int b){ int c = a + b; printf("myAdd:%d\n",c); return c;}int myAdd2(int a, int b){ int c = a + b; printf("myAdd2:%d\n", c...原创 2019-03-12 19:56:50 · 1929 阅读 · 0 评论 -
函数模板做函数参数、与普通函数的区别、重载、机制原理
当函数业务逻辑相同但参数不同时,我们就需要用到函数模板。函数模板做函数参数的本质是类型参数化,好处就是可以编写与类型无关的代码;注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。比如我们想对一些数组进行排序,这些数组可能有int数组、char数组等等#include <iostream>...原创 2019-03-30 17:25:08 · 468 阅读 · 1 评论 -
类模板做函数参数
单个类模板语法#include <iostream>using namespace std;template <typename T>class A{public: A(T a = 0) { this->a = a; } void printA() { cout << "a: " << a <<...原创 2019-03-31 18:40:07 · 506 阅读 · 0 评论 -
模板函数例子以及友元函数滥用的问题
使用模板函数实现一个复数类,熟悉模板函数的使用:(1)在类的内部实现#include <iostream>using namespace std;template <typename T>class Complex{ friend ostream & operator<< <T>(ostream &out, Co...原创 2019-04-30 17:58:41 · 284 阅读 · 2 评论 -
C++标准输入输出的几个常用函数
一、输入#include <iostream>using namespace std;void main(){ char buff[1024]; int a; long b; cin >> a; cin >> b; cin >> buff;//遇见空格后会停止接受数据 cout << "a:" <&l...原创 2019-05-29 19:43:31 · 1642 阅读 · 0 评论 -
C++文件的读写
需要相关的类fstream提供三种类,实现C++对文件的操作ofstream:写操作,由ostream引申而来ifstream:读操作,由istream引申而来fstream :同时读写操作,由iostream引申而来实现一个简单的读写:#include <iostream>#include <fstream>using namespace...原创 2019-05-29 21:11:39 · 150 阅读 · 0 评论 -
C++ STL 几个常用的排序算法merge、random_shuffle、reverse
#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;void printV(vector<int> &vec){ for (vector<int>::iterator...原创 2019-08-01 20:06:54 · 127 阅读 · 0 评论 -
C++多态的原理
我们知道实现多态的三个条件:(1)要有继承(2)要有虚函数重写(3)用父类指针(父类引用)指向子类对象(Parent *p = new Child)看一个简单的多态的例子#include <iostream>using namespace std;class Parent{public: virtual void printP() { cout ...原创 2019-03-07 16:26:15 · 123 阅读 · 0 评论 -
C++的虚函数、多态性
实现多态的三个条件:(1)要有继承(2)要有虚函数重写(3)用父类指针(父类引用)指向子类对象(Parent *p = new Child)多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。首先我们定义两个类:class Animal{pub...原创 2019-03-04 20:13:45 · 242 阅读 · 0 评论 -
C++多继承产生的二义性以及虚继承解决办法
#include <iostream>using namespace std;class B{public: int b;private:};class B1 : public B{public: int b1;private:};class B2 : public B{public: int b2;private:};cl...原创 2019-03-04 16:09:55 · 395 阅读 · 0 评论 -
函数的重载和函数指针在一起
#include "iostream"using namespace std;void myFun(int a, int b){ cout << "a:" << a << " b:" << b << endl;}void myFun(int a){ cout <&原创 2019-02-18 15:22:43 · 189 阅读 · 0 评论 -
浅拷贝问题
#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class MyName{public: MyName(const char* myName) { m_len = strlen(myName); p = (char*)malloc(m_...原创 2019-02-18 16:06:23 · 290 阅读 · 0 评论 -
void OpVar( int a,int b)const
void OpVar( int a,int b) constconst修饰的是this指针所指向的内存空间void OpVar( int a,int b) const ==> void OpVar( const Test *const this,int a,int b)原创 2019-02-18 17:16:42 · 207 阅读 · 0 评论 -
C++运算符重载(一元、二元运算符)
对自定义类对象Complex进行+运算符的重载#include <iostream>using namespace std;class Complex{public: Complex(int a=0,int b=0) { this->a = a; this->b = b; } //前置-- --...原创 2019-02-19 16:31:12 · 2132 阅读 · 0 评论 -
友元函数实现左移右移操作符的重载
#include <iostream>using namespace std;class Complex{public: Complex(int a=0,int b=0) { this->a = a; this->b = b; } friend Complex operator+(Complex c...原创 2019-02-19 17:37:56 · 189 阅读 · 0 评论 -
虚析构函数
有这样一种场景:class A{public: A() { cout << "A的构造函数" << endl; } ~A() { cout << "A的析构函数" << endl; }};class B : public A{public: B() { cout << "B原创 2019-03-05 10:30:36 · 121 阅读 · 0 评论 -
重写、重载和重定义
函数重载:(1)必须在一个类中(2)子类无法重载父类的函数,父类同名的函数将被名称覆盖(不管参数相不相同)(3)重载是在编译期间根据参数类型和个数决定函数调用函数重写:(1)必须发生于父类和子类之间(2)父类和子类之间必须有相同的函数原型(3)使用virtual关键字之后可以产生多态(如果不使用virtual关键字交重定义)(4)多态是在运行期间根据具体对象的类型决...原创 2019-03-05 11:11:50 · 108 阅读 · 0 评论 -
自定义类MyString并实现右移操作符、左移操作符、等于、不等于、赋值等操作符的重写
MyString.h文件:#pragma once#include <iostream>using namespace std;class MyString{public: MyString(); MyString(const char* str); MyString(const MyString& myString); ~MyS...原创 2019-02-20 17:31:49 · 818 阅读 · 0 评论 -
不要重载逻辑与(&&)和逻辑或(||)运算符
&&和||是非常特殊的操作符,他内置实现了短路规则,而操作符的重载是靠函数重载来完成的,操作数作为函数参数传递,C++的函数参数都会被求值,无法实现短路规则#include <iostream>using namespace std;class Test{public: Test(int i) { this->i = ...原创 2019-02-21 10:47:40 · 226 阅读 · 0 评论 -
C++的纯虚函数及抽象类
纯虚函数形式: virtual 类型 函数名 (参数列表) = 0;一个具有纯虚函数的基类称为抽象类假如我们有一个抽象类Shape:Shape x; //错误,抽象类不能建立对象Shape *x; //正确,可以声明抽象类的指针Shape f(); //错误,抽象类不能作为返回值类型void f(Shape x); //错误,抽象类不能作为参数类型Shape...原创 2019-03-08 15:31:09 · 182 阅读 · 0 评论 -
C++继承中的构造和析构
在C++的继承中,在子类对象构造时,需要调用父类构造函数对其继承来的成员进行初始化,在子类进行析构时,需要调用父类的析构函数对其继承来的成员进行清理,过程如下:(1)子类对象在创建时会首先调用父类的构造函数(2)父类构造函数执行结束后,执行子类的构造函数(3)当父类的构造函数有参数时,需要在子类的初始化列表中显示调用(4)析构函数的调用先后顺序与构造函数相反(5)如果 子类...原创 2019-03-04 15:24:47 · 172 阅读 · 0 评论 -
C++继承中赋值兼容性原则
#include <iostream>using namespace std;class Parent{public: void printP() { cout << "父类" << endl; }private: int p;};class Child : public Parent{p...原创 2019-02-21 17:48:59 · 388 阅读 · 0 评论