读书笔记 Visual C++ 编程之道(二)
来源:互联网 发布:stereonet软件百度云 编辑:程序博客网 时间:2024/05/29 13:56
1、&& 运算符 和 & 运算符相比效率高,因为&两边都要进行运算,| 和 || 也是同理的。&& 和 || 有短路运算符这一称呼。
2、单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的动机:如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。
C++单例模式示例:
class CSingleton {private: CSingleton() { }public: static CSingleton *GetInstance() { static CSingleton *m_pInstance; if(m_pInstance==NULL) { m_pInstance=new CSingleton(); } return m_pInstance; }};
3、单例模式说明类中能创建私有的构造方法
4、普通的类对象在其离开作用范围释放,但是对于类的指针对象只有当整个应用程序关闭后才会被释放。
5、delete 和 delete[] 不同点是: 前者删除普通的指针空间,后者删除数组类型的指针空间,如果调用delete删除数组类型指针空间,只会删除第一个元素的空间。
6、一定记得程序开发时不要自己计算某个结构体的大小,赢调用sizeof计算结构体的大小。
7、实现两个类互为成员变量可以用一下的方法
class B;class A{public: B* m_pB;};class B{public: A m_a;};
8、在指定的内存位置创建对象得分方法
#include<iostream>using namespace std;class Test{public: Test() { cout<<"创建"<<endl; } ~Test() { cout<<"释放"<<endl; } char *getName() { return "Test"; }};int main(){ char *buff = new char[sizeof(Test)]; Test *pTest=new (buff) Test;//在指定的内存地址创建对象 cout<<((Test*)buff)->getName()<<endl;//调用对象 cout<<pTest->getName()<<endl; pTest->~Test();//释放对象,因为对象是指针类型,并不会自己调用析构方法 cout<<"done"<<endl; delete []buff;//删除缓冲区 return 0;}
9、C++ 多线程学习的一片文章 http://blog.csdn.net/hitwengqi/article/details/8015646
10、常量方法修改类成员的示例
class CTest{private: mutable int m_Height;public: void SetHeight(int Height) const { m_Height=Height; }};
11、如果在类中声明静态成员那么需要在类外对其初始化,否则会报编译错误。
12、free 和 delete释放指针后,应该置指针为空
13、如果担心内存泄露,可以用auto_ptr,但是auto_ptr应用于数组一样会出问题。
14、C++里面的static_cast 关键字能够安全的进行类型转换。int nLen = static_cast<int>(10.5) +10 ;
15、函数的返回值不作为区分重载函数的一部分。对于普通的函数参数来说const关键字不作为区分重载函数的标识。但是参数如果是指针或者引用类型,则const关键字将作为重载函数的标识。参数默认值不能作为区分重载函数的标识。使用typedef自定义类型不作为重载的标识。
16、局部域中的声明的函数将隐藏而不是重载全局域中的函数。如果想在局部域中使用全局域中的函数,需要使用域运算符 ::。
17、函数指针,下面代码定义了一个指向具有两个整形参数的函数指针。
int (*ptfun)(int,int);也可以用typedef来定义一个函数指针类型,然后定义该类型的变量。例如:
typedef int (*ptfun)(int ,int);ptfun fun;
应用如下:
typedef int (*ptfun)(int,int);int sum(int x,int y){ return x+y;}ptfun fun;fun=sum;int ret=fun(10,20);
18、中间略过虚函数的使用、纯虚函数的使用、内联方法的使用、嵌套类的使用、局部类的使用。
19、类的静态数据成员(被所有类对象共享,并且允许使用类名直接访问)
class CBook{public: static unsigned int m_Price;//定义一个静态数据成员};unsigned int CBook::m_Prince=10;//初始化静态数据成员
20、略过友员类的使用、友员方法的使用。比较简单,好理解。
21、常成员函数只能引用成员变量,而不能修改成员变量。
void ShowHeight() const;//常成员函数的声明//常成员函数的声明和定义都要加上面的const;
22、类模板的使用。
//类模板的应用,有了类模板不同的数据类型可以不用定义不同的方法实现#include<iostream>using namespace std;template <class T>class Calculate //声明一个模板类{public: Calculate(T a,T b);public: T Add(); //声明模板中的两个函数 T SubTraction();private: T m_a; T m_b;};template <class T> //定义模板类的构造函数Calculate<T>::Calculate(T a,T b){ m_a=a; m_b=b;}template <class T> //定义模板中的加法函数T Calculate<T>::Add(){ return m_a+m_b;}int main(){ Calculate<int> cal1(20,10); cout<<cal1.Add()<<endl; Calculate<float> cal2(20.1,10.3); cout<<cal2.Add()<<endl; return 0;}
23、指针的引用作为函数的参数
void TestPtr(int *&pArray){ cout<<pArray[0]<<endl; pArray++;}//引用即改变了原来数组的指针
- 读书笔记 Visual C++ 编程之道(二)
- Visual C++.NET编程讲座之二
- 读书笔记 Visual C++ 编程之道
- 《高质量C++/C编程指南》读书笔记之二
- Visual C++.NET编程基础讲座之二
- C语言编程之道--读书笔记
- 《C++Premier》读书笔记之二
- 读书笔记之《C专家编程》
- Visual.C#.2010从入门到精通].(Visual.C#.2010.Step.By.Step)读书笔记 方法(二)
- Visual.C#.2010从入门到精通].(Visual.C#.2010.Step.By.Step)读书笔记 LINQ to SQL(二十)
- c/c++高质量编程(林锐)读书笔记二
- 《禅与Objective-C编程艺术》读书笔记(二)
- 《CLR via C#》读书笔记-异步编程(二)
- Oracle读书笔记-----PL/SQL编程(二)之程序流程
- Java并发编程读书笔记(二)之原子操作
- 有关于C指针的一些知识点(又名C指针编程之道读书笔记)
- 编程之道读书笔记
- 《C语言参悟之旅》-读书笔记(二)
- oc的第五天
- sdut-2159 Ivan comes again!(set+线段树)
- 第三章第16题
- PCA的数学原理
- 循环-19. 币值转换(20)
- 读书笔记 Visual C++ 编程之道(二)
- 二进制,八进制,十进制与十六进制之间的相互转换
- ABAP优化常用工具及优化技巧
- Linux设备驱动实例:并行端口LED板(包含/dev以及/sysfs下的方法)
- 根据OSI参考模型说明电子邮件的工作原理(老师作业)
- Cocos2d-x中luajit的使用
- AfxGetApp()->GetMainWnd与AfxGetMainWnd的区别
- 如何利用闪回数据库特性恢复failover 后的dataguard 环境?
- 本地音乐播放器