- 博客(8)
- 问答 (2)
- 收藏
- 关注
原创 管理虚函数的一些小工具(override)(final)
基类class A{public: virtual void func() { cout << "in class A" << endl; }};后续的实验均以上面这个基类展开进行。override当class B继承了class A,并想重定义A的虚函数时,由于某种神秘力量,导致写成了这个样子:class B : public A{publ...
2020-02-24 15:19:02
840
原创 C++模板类的友员 —— 精准是一种礼仪
1、最简单的友员形式#include <iostream>using namespace std;template <typename T> /* 声明模板类 */class A{ T num; friend void show_size(); /* 指定友员 */};A<double> a_global1;A<int> a_...
2020-02-15 23:34:30
307
原创 多重继承/菱形继承(virtual)(虚基类)
1、一个我从来没见过的场景A作为基类B、C均public继承自AD同时继承自B、Cclass A{public: A() : number(-1) { cout << "A()" << endl; } A(int n) : number(n) { cout << "A(" << n << ")" << endl...
2020-02-09 17:25:08
428
原创 枚举成员名称冲突(重名)的终极解决方案 —— class枚举(enum)
先从一个问题说起enum ENUM1{ normal, big, mid, small};enum ENUM2{ normal, big, mid, small};如上,2种不同的枚举类型却包含了名称相同的成员,编译会产生报错:error: ‘normal’ conflicts with a previous declaration实际的报错远比这要多,因为EN...
2020-02-01 21:14:27
5525
原创 如何在class中优雅地使用常量以及对static成员的探讨(const)(static)(enum)
如果在class中想要定义常量,直观上是想用这样的方式class A{public: const int length = 10; char buffer[length];};上面这个逻辑在class外是行得通的,也是最常用的。但是在class内部,上面的代码编译时会报错:error: invalid use of non-static data member 'A::lengt...
2020-02-01 17:48:37
430
原创 C++的private并没有听起来那么“保密”(virtual)(using)
前言从常识角度看,private权限的下的成员对外是永远不可见的,而且private成员也不会公开给继承的子类,所以似乎private成员(尤其是成员函数)似乎具有了很强的安全性——既然无论如何别人都使用不了,那么该class的设计者可以完全控制private成员的使用时机,所以可以简化一些错误判断或者时序控制工作。然而实际则不尽然,在一些特殊情况下,仍旧有可能存在突破private限制,进行...
2020-02-01 13:15:28
388
原创 explicit——为毁灭而生的补丁
构造函数的隐式转换如果构造函数只有1个参数,则可以用等号隐式地调用构造函数,如下所示#include <iostream>using namespace std;class A{public: /* explicit */ A(int n) : number(n) { cout << n << " create" << endl...
2020-01-31 21:51:35
872
原创 指向类成员的指针(.*)(->*)
要点指针是有类型的,这点和「通常的指针」一样,指向int的指针也只能指向int类型的数据相对于「通常的指针」,增加了对指向对象的限制 —— 指向的对象限定为某个class中的成员这种指针不可以单独使用,需要配合一个具体存在的对象才有意义#include <bits/stdc++.h>using namespace std;class A{public: int...
2020-01-31 20:50:41
513
空空如也
帮忙判断下这段代码中模板函数的匹配原则应该如何理解?
2020-02-16
git如何把一台电脑上的提交迁移到另一个电脑上?
2020-02-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人