C++
程序猿强哥
这个作者很懒,什么都没留下…
展开
-
C++ Vector的用法
什么是VectorVector是一个类,其内部维护了一个动态数组,数据就是保存在该数组之中,数据类型可以是任意类型。基本使用Vector的4种创建方式 //这种方式创建vector,表示先创建一个空的内置数组,随着保存数据的增加,数组会自动扩容。 vector<int> vec_1; //明确指定vector中的内置数组长度为1 vector<...原创 2020-05-07 14:33:48 · 175 阅读 · 0 评论 -
编译器的RVO和NRVO
RVO和NRVO是一个可选值,可以在编译器上屏蔽掉原创 2020-05-06 16:46:18 · 284 阅读 · 0 评论 -
cin和while配合使用时,可能出现的死循环
先看如下代码void test08(){ int num; cout << "请输入一个1到10的数字:" << endl; while (true) { cin >> num; if (num > 0 && num <= 10) { cout << "输入的数字为" <<...原创 2020-04-22 17:25:36 · 1557 阅读 · 1 评论 -
C++异常变量的生命周期,以及可能会遇到的坑
先看如下代码class MyException{public: MyException() { cout << "MyException的默认构造" << endl; } MyException(const MyException & e) { cout << "MyException的拷贝构造" << endl;...原创 2020-04-22 15:25:06 · 1340 阅读 · 0 评论 -
C++选择性的异常抛出,windows 的程序无法限制
先看如下代码//可抛出所有类型异常void TestFunction01(){ throw 10;}int main(){ try{ TestFunction01(); } catch (...){ cout << "捕获异常!" << endl; } system("pause"); return EXIT_SUCCESS;...原创 2020-04-22 14:53:11 · 134 阅读 · 0 评论 -
C++异常处理入门
先看如下代码void test02(){ int a = 10; int b = 0; int c = a / b;}当你在main()中调用test02()时,很明显会出现如下错误int main(){ test02(); system("pause"); return EXIT_SUCCESS;}因为除数不能为0,所以执...原创 2020-04-22 11:10:30 · 256 阅读 · 0 评论 -
C++重新解释类型转换
重新解释类型转换是一个函数调用,如下int a = 10;int * p = reinterpret_cast<int *>(a);reinterpret_cast 就是重新解释类型转换,以上代码很明显是错误的,因为变量a,从本质上来说,无法转化为一个指针类型。但是在编译的时候,并不会报错。reinterpret_cast 是最不安全的类型转换函数,因为编译器不会检查转...原创 2020-04-22 10:21:28 · 497 阅读 · 0 评论 -
C++常量转换
先看如下代码const int * p = NULL;常量转换,第一层含义是,将常量转化为非常量,如下代码,可将p转化为非常量指针。int * newp = const_cast<int *>(p);newp中保存的地址和p中保存的地址完全一样,唯一区别是,newp不再是一个常量指针了。常量转换,第二层含义是,将非常量转化为常量,具体代码如下int * p...原创 2020-04-22 10:13:08 · 7410 阅读 · 0 评论 -
C++动态类型转换
动态类型转换是比静态类型转换更为严格的一种类型转换。如下代码基本数据类型无法通过动态类型转换 //基础类型不可以转换 char c = 'a'; //dynamic_cast非常严格,失去精度 或者不安全都不可以转换 double d = dynamic_cast<double>(c);动态数据类型转换只能发生在父类和子类之间,现在就通过代码来测试下cl...原创 2020-04-22 10:02:35 · 2916 阅读 · 0 评论 -
C++静态类型转换
先看如下代码char a = 'a';double d = a;很明显以上代码无法编译通过,因为a 和 d 是不同的数据类型,如果我们确实有需求将a赋值给d,这时应该怎么做呢?这就需要用到类型转换,就是将 a 的数据类型 转化为 double 类型,那么如何来转呢?很简单,只需要用C++内置函数static_cast()就可以了,具体示例代码如下 char a = 'a...原创 2020-04-22 09:45:35 · 2006 阅读 · 0 评论 -
C++通过类模板实现通用类型的数组函数
通用类型的模板数组定义如下template< class T>class MyArray{public: //构造 explicit MyArray(int capacity) //防止隐式类型转换 防止MyArray arr = 10; 写法 { this->m_Capacity = capacity; this->m_Size = 0;...原创 2020-04-21 17:34:35 · 807 阅读 · 0 评论 -
友元函数带模板参数的类外实现,对其中可能会遇到的问题进行分析
先在类中定义一个友元函数printPerson(),并且参数是一个类模板Person<T1,T2> & p,如下template<class T1, class T2>class Person{ //友元函数类内实现 利用空参数列表 告诉编译器 模板函数的声明 friend void printPerson(Person<T1, T2> ...原创 2020-04-21 16:50:30 · 506 阅读 · 0 评论 -
类模板作为友元函数参数的场景
template<class T1 ,class T2>class Person{ //友元函数类内实现 friend void printPerson( Person<T1 ,T2> & p ) { cout << "姓名:" << p.m_Name << " 年龄: " << p.m_Age &l...原创 2020-04-21 15:29:00 · 122 阅读 · 0 评论 -
C++的类模板分文件编写所带来的问题解决
假设我在Person.h中编写了如下类模板#pragma once #include <iostream>#include <string>using namespace std;template<class T1 ,class T2>class Person{public: Person(T1 name,T2 age); void...原创 2020-04-21 15:05:36 · 591 阅读 · 0 评论 -
C++类外实现函数
先定义一个类,类中定义未实现的函数template<class T1 ,class T2>class Person{public: Person(T1 name, T2 age); //{ // this->m_Name = name; // this->m_Age = age; //} void showPerson(); //{ // c...原创 2020-04-21 09:42:31 · 3386 阅读 · 0 评论 -
模板类的2种继承场景
先定义一个模板基类template <class T>class Base{public: T m_A; //double类型};//child继承与 base必须告诉base中的T的类型,否则T无法分配内存class Child :public Base<int>{};1:普通类继承模板类,示例如下//child继承与 base必须告...原创 2020-04-21 09:34:06 · 221 阅读 · 0 评论 -
类模板做函数参数的三种场景
先定义一个类模板//类模板template <class NameType, class AgeType = int> //类模板可以有默认类型class Person{public: Person(NameType name, AgeType age) { this->m_Name = name; this->m_Age = age; } ...原创 2020-04-21 09:22:01 · 175 阅读 · 0 评论 -
类模板中成员函数的创建时机
先看代码class Person1{public: void showPerson1() { cout << "Person1的调用" << endl; }};class Person2{public: void showPerson2() { cout << "Person2的调用" << endl; }}...原创 2020-04-20 17:59:06 · 383 阅读 · 0 评论 -
C++类模板入门
类模板的定义如下template <class NameType, class AgeType> class Person{public: Person(NameType name, AgeType age) { this->m_Name = name; this->m_Age = age; } ...原创 2020-04-20 15:43:01 · 135 阅读 · 0 评论 -
C++模板函数的自定义参数类型
先看如下代码template<class T>bool myCompare( T &a , T &b ){ if ( a == b) { return true; } return false;}以上定义的模板函数,T只能接收基本数据类型的参数,如下整形类1. int 占4个字节 用来定义-2^31~2^31-1范围内的数...原创 2020-04-20 15:34:22 · 2378 阅读 · 0 评论 -
C++函数模板和普通函数的区别以及调用规则
先看如下代码template<class T>T myPlus(T a, T b){ return a + b;}int myPlus2(int a, int b){ return a + b;}最直接的区别就是:模板函数比普通函数多了template<class T>,模板函数的参数类型在定义时不确定,而普通函数的参数在定义时就已经确定。继...原创 2020-04-20 15:08:31 · 500 阅读 · 0 评论 -
C++函数模板实践案例-对char和int数组进行排序
排序模板template<class T>void mySort( T arr[], int len ){ for (int i = 0; i < len;i++) { int max = i; for (int j = i + 1; j < len;j++) { if (arr[max] < arr[j]) { //交换...原创 2020-04-20 14:31:13 · 299 阅读 · 0 评论 -
C++函数模板 class 和 typename 的区别
先看如下代码template<class T> void mySwap(T &a, T &b){ T tmp = a; a = b; b = tmp;}int a = 10;int b = 20;mySwap(a, b);以上代码可以直接编译通过,那么此时将class 改为typename,如下template<typename...原创 2020-04-20 14:16:28 · 1726 阅读 · 3 评论 -
C++函数模板入门
先看如下2个函数//交换int类型两个数字void mySwapInt( int & a, int & b){ int tmp = a; a = b; b = tmp;}//交换double数据void mySwapDouble(double &a, double &b){ double tmp = a; a = b; b = tmp...原创 2020-04-20 14:06:52 · 136 阅读 · 0 评论 -
C++ 动态联编(多态)原理剖析
本篇文章就来探索多态的原理。先看下面的类class Animal{public: void speak() { cout << "动物在说话" << endl; } void eat() { cout << "动物在吃饭" << endl; }};用vs2013开发人员命令工具.exe输入,如下命令,先来看...原创 2020-04-17 16:12:14 · 332 阅读 · 0 评论 -
C++静态联编和动态联编
先看下面的代码class Animal{public: void speak() { cout << "动物在说话" << endl; }};class Cat :public Animal{public: void speak() { cout << "小猫在说话" << endl; }};...原创 2020-04-17 15:11:54 · 346 阅读 · 0 评论 -
C++中的继承02-属性的继承
本篇是基于上一篇的内容继续来学习继承,没看过上一篇的朋友,请点击下方C++中的继承01-初识继承先看下方两个类class Father{public: int age;};class Son : public Father{};有了继承关系后,Son中虽然没有int age,但依然可以访问到age,如下Son son;son.age = 20;cou...原创 2020-04-17 12:07:36 · 422 阅读 · 0 评论 -
C++中的继承01-初识继承
在讲继承之前,先来看下,下面的两个类class BasePage{public: void header() { cout << "公共头部" << endl; } void footer() { cout << "公共底部" << endl; } void left() { cout << "左侧列...原创 2020-04-17 10:41:07 · 191 阅读 · 0 评论