杂记小记本

https://blog.csdn.net/candy060403/article/details/7414241?winzoom=1
一、解决C++头文件重复包含的解决方案

二、//关于VS添加注释的方法
1、
方法一2、在VS界面右键菜单:Rafactor(VA)->Edit Refactoring Snippets->Refactor Docunment method…。。。。
三、template使用(先有函数模板后有模板函数)
template《class T》//==template《typename T》里面也可以声明多个参数
void MySwap(T& A, T& B)
{
}
template只对紧挨着的函数有效,要想下一个函数还有效,需要继续声明该template。如果想显示使用MySwap(),则只需要这样 MySwap()即可。里面T就等价于int。
1、几个知识点
普通函数可以进行自动类型转换
模板函数必须严格类型匹配
函数模板可以像普通函数一样被重载(两个模板可以重名)
C++编译器优先考虑普通函数(目标文件是.obj .o也是二进制文件)
如果函数模板可以产生一个更好的匹配,那么选择模板
可以通过空模板实参列表的语法限定编译器只能通过模板匹配
2、类模板和函数模板类似
类模板必须显示指定类型(函数模板可以自动推导类型)
例如:person p();
四、编程时:ctrl+shift+u 可以使小写变大写
五、类模板外部实现时,要注意在实现的时候声明template《》和类指定T,才可以完成实现。另外重载操作符也是一个难点。
将模板类和友元函数结合:可以用到类外声明的方式。(总结就是:模板类就不要滥用友元,问题错误意想不到)
1、模板实现有时会和C++编译机制有关,C++编译每个文件都是独立编译。函数模板会经历两次编译,cpp和h文件分离编写,如果main函数引用h文件会由于编译原理产生错误,此时引用cpp文件会直接编译通过。所以一般都会把存在类模板实现的文件改为:。hpp文件,进行使用。
2、类模板的static成员初始化及实例化,同类型模板类,共用一个static。
3、使用类模板时,一定是一个具体的类型才可以使用,只有知道类型才可以分配内存,类模板派生类模板,将T代入类模板中。
4、类模板构造:
类模板操作符:
MyArray operater=(const MyArray& arr)
{
if(this->pAddr != null)
{
delete[] this->pAddr;
}
this->mSize = arr.mSize;
this->mCapacity = arr.mCapacity;
//申请内存空间
this->pAddr = new T[this->mCapacity];
//数据拷贝
for(int i = 0;imSize;i++)
{
this->pAddr[i] = arr.pAddr[i];
}
return this;
}
5、不能对右值取引用;
T& data//相当于对左值取引用(只能赋变量不能直接赋值)
T&& data//相当于对右值去引用(直接可以赋数值)
6、关于操作符深拷贝
mystring mystring::operate=(const mystring& another)
{
mystring tmp;
delete[] tmp._str;
int len = strlen(this->_str);
len+=strlen(anthor._str);
tmp._str = new char[len +1];
memset(tmp._str,0,len+1);//important
strcat(tmp._str,this->_str);
strcat(tmp._str,another._str);
return tmp;
}
7、new一个堆对象时会自动调用构造函数,delete一个堆对象会自动调用析构函数。注意包含无参构造函数(当时用数组时会用)
8、在对象调用函数的同时,向该函数传递了该对象的指针,该指针就是this。也就是类的函数公用,对象在调用时传递该对象的this进入函数从而得到自己对象的结果
六、类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend。
前向引用只能解决引用和指针问题,不能处理其他问题
友元关系不能被继承;友元关系是单向的不具有交换性;友元关系不具有传递性。
声明为谁的友元,就可以通过谁的对象,访问谁的私有成员
七、.函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明。
八、static_cast:一般的转换(内置的数据类型、具有继承关系的指针或引用)
dynamic_cast:基类和派生类之间的转换
const_cast:主要针对const转换(指针 引用或者对象指针)
reinterpret_cast:主要用于没有任何关联之间的转换,比如一个字符指针转换为一个整形数(强制类型转换;无关的指针类型都可以进行转换;)
1、int a =10;
const int& b = a;
int& c = const_cast<int&>(b);
c = 20;
//结果:abc都是20;
2、const_cast:增加或去除变量的const性
const int
p = null;
int* p2 = const_cast<int*>§;
int* p3 = null;
const int * p4 = const_cast<const int*>(p3);
3、typedef void(*FUNC1)(int,int);
typedef void(FUNC2)(int,char);
FUNC1 func1;
FUNC2 func2 = reinterpret_cast(func1);
九、
C++如果抛出异常必须处理,否则会终止程序。
1、异常的接口声明:在函数定义后面直接加入throw指定类型
2、
十、栈上对象是可以返回的,但是不能返回栈上的引用(除非对象本身)
十一、const
1、const可修饰数据成员 成员函数 类对象
2、修饰数据成员时候,初始化位置只能在 参数列表里面;例如:
A(int val):val(val){
}
2/1、被const修饰的数据成员,不能被修改.
3、int const 和const int 没有区别。
修饰成员函数:位置 函数声明之后,实现体之前,要求在声明和定义处都要有const修饰;意义:const 函数承诺,不会修改数据成员。能访问const和非const数据成员 但不能修改 非const数据成员 只能访问const成员函数。构成重载;const对象只能调用const成员函数。非const成员对象,优先调用非const成员函数;若无,则可调用const成员函数。
4、修饰类对象
const修饰函数,是从函数的层面不修改数据。
const修饰对象,是从对象层面,不修改数据,只能调用const成员函数。
5、const 数据成员 成员函数 类对象
数据成员,初始化,在构造器的参数列表,不能修改
成员函数,实始化位置 声明之后 实现体之前。承诺不会修改数据,可以访问const和非const的数据,但只能用const成员函数。
类对象, 承诺不会修改数据。但可以访问const和和非const的数据,但只能用const成员函数。

十二、static
在生成对象的时候,普通数据成员才有空间,而static成员在类声明的时候,就已经开辟了空间(data rw);static数据成员,既属于类,也属于对象,但终归于类。类其实本质上也是一个命名空间。成员函数也是同理。
1、注意:它的初始化,类内定义,类外初始化。type 类名::变量名 = 初值。
2、static 数据成员
实现族类的数据共享,共享的区间还是在族内;相比较全局函数和变量而言,不容易造成命名上的冲突。
存储位置 data rw/bss 不占用栈内存,sizeof(A)不变。
3、static 成员函数
类名::成员函数 对象./->成员函数 this指针
只能调用static数据和成员函数
4、const static 就地初始化
十三、指向类成员的指针(较难度 暂略)
string B::ps = &B::name;
B b;
b.ps = “china”;//ps引用了B类内成员name
void (B::pf)(void) = B::func;
(b.pf)();//相当于pf指向了func();
十四、string和char
互相转换
string str; const char
ctr = str.c_str();
char * ch; string str(ch);
十五、map;通过【】方式访问map中一个不存在key,会将这个key插入到map中,并且给value一个默认值。如果发现key值存在,则会修改key对应的value。
十六、对应字节数
32:char 1byte; char
4byte;
short int 2byte; int 4byte; unsinged int 4 byte;
float 4byte; double 8byte; long 4byte;
long long 8byte; unsigned long 4byte;
64: char 1byte;char 8byte
;
short int 2byte; int 4byte; unsigned int 4byte;
float 4byte; double 8byte; long 8byte;
long long 8byte; unsinged long 8byte;
十七、红黑树
https://blog.csdn.net/weixin_39793420/article/details/111094344
十八、经典题目概览:
1.排序算法
2.内存碎片和内存对齐、内存泄漏检测
3.指针和引用及拷贝构造之间关系
4。智能指针
5.STL复杂度 map原理
6.虚函数(原理、虚函数表、虚表指针)
7.堆栈区别
8.vector
十九、const和STL map结合使用
:template
void printElements(const T& coll){
for(const auto& elem:coll){
cout<<elem<<endl;
}
}
二十、参数std::function需要别名
二十一、回调函数
二十二、语句块宏定义的使用:
#pragma region和#pragma endregion
二十三、类的前置声明
二十四、友元类 友元父类
二十五、C++中,mutable也是为了突破const的限制而设置的
二十六、无名的命名空间
二十七、move使用
二十八、std::get(std::tuple) get和tuple连用
二十九、回调函数解析
在这里插入图片描述
三十、祁宇个人开源社区
http://purecpp.org/detail?id=2087
三十一、#pragma omp parallel sections让程序并行化
三十二、C++ chrono 库中的 steady_clock 和 system_clock计时
三十三、模板有类型模板和非类型模板两种,非类型模板
enum { Size = 100 };
static const QStaticStringData qstring_literal = {
Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size),
QT_UNICODE_LITERAL(str) };
三十四、C++中的mutable关键字;mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。当在const修饰的函数里可以指定一个变量处于可修改的状态,同时也可以保证其他变量不被修改。最常见的是:要测试一个方法的被调用次数。
三十五、QT工作小记:
setStyleSheet:
①:该函数只能用于设置有父窗口的子窗口的背景!如果一个窗口没有子窗口,则无法使用该函数来设置背景颜色或图片!!
②:同时:对于一个父窗口而言:如果我们用setStyleShette设置了其样式,而对于其子窗口:如果没有用同样的函数来设置的话 则其子窗口的样式和其父窗口完全一致,亦即:其集成了自己父窗口的样式!③:延伸:对顶层窗口(没有父窗口),其有若干个子窗口,则当我们用setStyleShette来设置这个顶层窗口的样式后,依据①可知:该父窗口本身没有任何变化,亦即设置没有生效;而其子窗口:只要子窗口本身没有用setStyleShette来设置自己的样式表,则其就是用的自己父窗口的样式表!!
setSizePolicy:是设置控件在布局(layout)里面的大小变化的属性。如果控件没有在布局里,没什么用。
setIconVisible:
setMaxButtonVisible:
setMinButtonVisible:
setProperty:
QStringLiteral:Qt5中新引入的一个用来从“字符串常量”创建QString对象的宏
QSignalMapper:
Qt之界面数据存储与获取(使用setUserData()和userData()):
QTreeWidget: setItemWidget
showEvent(QShowEvent *):先进入界面,然后做处理.
三十六、
查看VS配置windows SDK版本及查看本机Windows sdk版本号
三十七、
http://zplutor.github.io/2017/11/12/how-to-debug-program-silent-exit/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值