C++常用知识点
来源:互联网 发布:java websocket 心跳 编辑:程序博客网 时间:2024/05/02 01:35
如何让一个类不能创建实例
1虚基类,2构造函数为私有函数。
explicit的作用
解析:explicit构造函数是用来防止隐式转换的。请看下面的代码:
class Test1
{
public:
Test1(int n)
{ num = n; } //普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n) { num = n; } //explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1 = 12; //隐式调用其构造函数, 成功,执行了隐式转换,等价于Test1 temp(12);t1(temp);注意这个地方调用了 编译器为我们提供的默认复制构造函数
Test2 t2 = 12; //编译错误,不能隐式调用其构造函数
Test2 t3(12); //显示调用成功
return 0;
}
C++用new来创建对象和非new来创建对象的区别
#include <iostream>using namespace std;class A{private: int n;public: A(int m):n(m) { } ~A(){}};int main(){ A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配 delete c; return 0;}
第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放,所以这就产生一个问题是把对象放在栈中还是放在堆中的问题,这个问题又和堆和栈本身的区别有关。
空类占多少个字节?
class CBase
{
};
sizeof(CBase)=1;
为什么空的什么都没有是1呢?
c++要求每个实例在内存中都有独一无二的地址。//注意这句话!!!!!!!!!!
空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。
引入库
#pragma comment(lib,”*.lib”)
加入库的预编译指令,这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。
- C语言常用知识点
- C语言常用知识点
- c语言常用知识点
- C程序中常用知识点注意事项
- C语言重要常用知识点梳理
- 常用知识点
- 常用知识点
- C 语言中一些非常用知识点 备忘录
- 高质量C编程10-常用知识点收集
- c知识点
- C 知识点
- C/C++code知识点
- C/C++【知识点笔记】
- javascript常用知识点总结
- JAVA 常用知识点1
- javascript常用知识点总结
- 常用小知识点
- javascript常用知识点积累
- 《VC++深入详解》学习笔记 第五章 文本编程
- SAP 之 采购
- 相约世纪末
- C++中类的学习
- HTML CSS列表元素ul,ol,dl的研究与应用!
- C++常用知识点
- 《VC++深入详解》学习笔记 第六章 菜单
- 相约世纪末
- WAP2.0开发规范及原则
- MOS管怎么区分N沟道和P沟道呢
- 面试训练O(1)时间取得栈内最小元素
- 《Maven in Action》
- NEON
- 七夕在相爱人的眼中也是普通的一天 。