- 博客(19)
- 收藏
- 关注
转载 友元函数
问题的提出 我们已知道类具备封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的。非成员函数能够访问类中的公有成员,但是假如将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程式的运行效率。 为了解决上述问题,提出一种
2013-07-04 09:34:31
642
转载 enum in c++ 2
参考文献:[1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社[2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社1、枚举enum的用途浅例 写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rain
2013-07-02 17:52:21
446
转载 enum in C++
很多初学者对枚举(enum)感到迷惑,或者认为没什么用,其实枚举(enum)是个很有用的数据类型。枚举类型的使用方法一般的定义方式如下:enum enum_type_name{ENUM_CONST_1,ENUM_CONST_2,...ENUM_CONST_n} enum_variable_name;注意:enum_type_name 是自定义的一种数据数
2013-07-02 17:34:18
647
转载 switch case是否需要加括号
switch(lParam) { case WM_LBUTTONUP: AfxMessageBox(_T("ok!")); this->ShowWindow(SW_SHOW); break; case WM_RBUTTONUP: { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lp
2013-06-25 13:39:53
5060
转载 (int &)问题
#include using namespace std; int main(int argc, char* argv[]) { float a = 1.0f; cout cout cout cout cout float b=0.0f; cout
2013-06-14 15:24:27
426
转载 c++虚函数表解析
对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一
2013-06-14 14:06:00
441
原创 C++ 多态(polymorphism)的例子
关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout }; class ClxDerived : publ
2013-06-14 13:34:58
1129
原创 little endian & big endian
检查CPU是否为大端或小端一般而言普遍的方法是利用联合体存储数据的顺序,如int checkCPU(){ union w { int a; char b; }c; c.a = 1; return (c.b == 1); // 小端返回TRUE,大端返回FALSE}linux源代码static union
2013-06-08 17:16:09
408
转载 与“零值”的比较
1,BOOL与零值的比较if( flag )if( !flag )2,float与零值的比较const float EPS = 0.00001;if ((x >= - EPS) && (x 3, char与零值的比较if (p == NULL)if (p != NULL)
2013-06-05 17:00:09
462
转载 类string的构造函数、析构函数和赋值函数
class String{ public: String(const char *str = NULL); //普通构造函数 String(const String &other); //拷贝构造函数 ~ String(void); //析构函数 St
2013-06-05 16:50:05
499
原创 双链表操作 written by my self
struct student{ int data; struct student *next; struct student *pre;}dnode;1, 删除节点dnode *del(dnode *head, int num){ dnode *p1; p1=head; while(
2013-06-04 23:47:23
432
原创 单链表操作 written by myself
struct student{ int num; struct student *next;}node;1, 建立单链表node * create(){ node * head, *p, *s; int x; bool flag = TRUE; p = head = NULL; while
2013-06-04 22:21:00
456
转载 some C++ summary 2
1. 纯虚函数如何定义?使用时应注意什么?抽象类是如何定义的?抽象类能否实例化?virtual void f()=0;是接口,子类必须要实现如果一个类含有至少一个纯虚函数,这个类称为抽象类(abstract class).抽象类不能实例化2.数组和链表的区别数组:数据顺序存储,固定大小链表:数据可以随机存储,大小可动态改变3. 已知一
2013-06-04 15:39:26
537
原创 some C++ summary
1, 头文件(包括.h和.hpp)里面有 #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... //声明,定义 #endif加入这些是防止头文件被重复include. 需要注意的是宏(__SOMEFILE_H__)在每个头文件里面要不同,所以一般而言是大写的文件名当该头文件多次被包含的时候,第一次#
2013-06-03 16:08:48
550
转载 memset()的效率以及源码分析
void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeof(int));这样得到的a
2013-05-28 12:32:25
458
原创 四种强制转换方式
1 reinterpret_cast'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以
2013-05-28 12:30:21
775
原创 要处理
一、关于指针的思考指针的基本概念:int a[100]; int *p; p=a; 以上代码有一些基本的等价,需要铭记。p等价于&a[0]等价于a*p等价于a[0]等价于*a*(p+1)等价于p[1]等价于a[1]等价于*(a+1)但是,如果对数组名取址呢?int a[]={1,2,3};
2013-05-28 12:29:38
542
原创 初始化列表
1)基本概念,初始化列表的形式#include using namespace std; class MemberInitializationList{private: int i; int j;public: MemberInitializationList(int val) :j(val), i(j)
2013-05-28 12:28:26
464
原创 delete []m_data
String::~String(void){ delete [ ] m_data; // 由于m_data 是内部数据类型,也可以写成 delete m_data;}这是为了与前面的new相对应如果前面的new格式为char * a=new char[12];(注意,有[])则后面delete就要有[];如果前面new没有[],则后面delete也不需要
2013-05-28 12:27:37
1054
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅