- 博客(27)
- 资源 (8)
- 收藏
- 关注
转载 C++中的继承 public protected private
public protected private共有继承 public protected 不可见私有继承 private private 不可见保护继承 protected protected 不可见#includeusing namespace std;////////
2014-03-28 11:03:50 1864
原创 C++ 中的vptr与vtable
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class no_virtual { int a;public: void x() const{} int i() const {return 1;}};class on
2014-03-28 11:03:38 3665
原创 C++纯虚函数
抽象基类:函数调用时,形参不能够是抽象基类,而应该是“指针”或者是"引用"。// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class Base { int a;public: virtual void x()
2014-03-28 11:03:23 1866
原创 C++对象切片
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std; class Pet { string pname; public: Pet(Pet& p) { pname=p.pname; }
2014-03-28 11:03:06 4280
原创 C++中继承时的重载和重新定义
C++编程思想 P372对于虚函数,在派生类中:不允许改变返回值(非虚函数派生类可以。),特殊情况:但是当返回值的类型是基类返回值类型的派生类时,可以改变。如果重新定义了基类的重载成员函数,也就是定义了一个同名的函数,但参数不同,则基类的其它函数将被隐藏。
2014-03-28 11:02:50 1888
原创 写正确函数需要注意的地方:链表的及时终止冒泡排序
Node* sort(Node* phead){ if (NULL==phead || NULL==phead->pNext) { return phead; } Node* ptemp=phead; Node* plastchangepoint=NULL;//标记上一次 while (plastchangepoint!=phead->pNext) { bool chan
2014-03-28 11:02:31 1894
转载 GFP、GSP和VCG的特点和介绍
GFP(广义一阶价格拍卖),主要特点是关键词拍卖中广告主之间进行的是重复博弈,在每一轮拍卖结束后,广告主会根据上一轮报价的情形决定下一轮的报价决策,而这场价格战会被自然而然地分为价格攀升阶段和价格崩溃阶段。只能是在搜索引擎公司了解广告商估价的前提下运作,否则因为没有均衡,波动会在极大程度上带来拍卖效率上的损失。GSP(广义二阶价格拍卖),简单来说它即是支付数=点击次数*下位出价。在实际
2014-03-28 11:01:25 23368 4
原创 C++的new 和 delete 操作符重载。
测试代码:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;class test{public: int a; double x; test(int i,double m):a(i),x(m) { printf("cr
2014-03-04 12:16:20 4356
原创 只能用于构造函数的explicit
这个关键字只能用于构造函数,意思是该构造函数不能隐式的被调用。当有隐式的类型转换的时候,该explicit可以阻止这一过程。如:class One{public:One(){}};class Two{public:Two(const One&){}};void f(Two){}int main(){One one;f(one);}该程序
2014-03-04 12:16:07 2182
原创 C++ 指向成员的指针(数据成员指针,函数成员指针)
数据成员指针:class Data{public : int a, b,c;}定义数据成员指针:int (Data::*pmInt)=&Data::a;这样子的话pmInt就可以指向某个Data对象中的所有int数据成员。如:pmInt=&Data::a;定义一个DataData d;d.*pmInt=48;//d.a=48;函数成员指针:
2014-03-04 12:15:55 2185
原创 模板中的嵌套类
#include "stdafx.h"#include #include using namespace std; template class X{ //without typename , you should get an error: typename T::id i; //T::id i;public: void f(){i.g();}};cl
2014-03-04 12:15:03 5520
原创 template函数
#include "stdafx.h"#include #include using namespace std; template T sum(T b,T e, T init=T()){ char chars[N]; cout<<"N: "<<N<<endl; init=b+e; return init;}template T sum(T b,T e,
2014-03-04 12:14:57 1925
原创 C++异常处理的用处
异常处理一个用处在于将正常的处理流程中跳到恰当的异常处理器中,使得异常处理与正常的处理流程隔离。使得程序设计过程更加流畅。 异常处理保证当程序执行流程离开一个作用域的时候,对于属于该作用域的所有由 “构造函数建立起来的” 对象,它们的析构函数一定会被调用。 然而,如果一个对象的构造函数在执行过程中抛出异常的话,则它的析构函数将不会被调用。因此,编写构造函数的时候,程序员必须特别的仔细
2014-03-04 12:14:50 2123
原创 C++异常处理catch向上类型转换。
匹配的异常并不要求与其捕获的对象类型一致。一个对象或者是指向派生类对象的引用都会与其积累处理器匹配。如果是对象本身而不是引用或指针的话,这个异常对象将会被“切割”,丢失派生类包含的所有信息。因此最好是抛出引用,或者是指针。但是不会进行自动类型转换。比如如下情况:class Except1{};class Except2{public: Except2(co
2014-03-04 12:14:45 2032
原创 throw后局部变量的析构。
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include using namespace std; class object{public: ~object() { cout<<"~object()"<<en
2014-03-04 12:14:37 2018
原创 C++中的cast
dynamic_cast:用于向下类型转换。该函数仅当向下类型转换是正确的时候返回有效的指针,否则返回0;所以说他是安全的。注意:通常在向下类型转换和向上类型转换时,指针的值会有所调整,特别是在多重继承的时候。当知道确实是该类型时,可以用static_cast代替dynamic_cast。
2014-03-04 12:14:27 1538
原创 C++析构函数和虚析构函数。
析构函数如果不是虚的话,基类的析构函数将不会被调用。多态时,也就是派生类被基类指针所指,或者被基类别名:虚析构函数,被调用时,其自身的析构函数和基类的析构函数都将会被调用。非虚的时候,不进行多态,只有基类的会被调用。纯虚析构函数:定义的时候除了加“=0”。还需要给出函数的实现。因为当递归的调用析构函数时需要自动执行。作为一个准则,任何时候我们的类中都要有一个虚函数,我们
2014-03-04 12:14:21 1678
原创 写正确程序需要注意的地方:一个数组是有一个递减数列座椅若干位形成的,在这种数组中查找某一个数。
//4,3,2,1,10,9,8,7,6,5int searchInRotateSortedArray(int* arr, int count, int value){ if (count<=0 || arr==NULL) return -1; int mid; int left=0; int right=count-1; while (left<=right) { //
2014-03-04 12:13:48 782
原创 写正确程序需要注意的地方:输入一个正数n,输出所有和为n连续正数序列。
int sequenceFactor(int n){ if(n<=0) return -1; for(int i=2;i<=n/2;++i) { if(i%2==1)//需要分成奇数个 { int div=n/i;//则商为中间值。 if(n%i==0 && div-(i-1)/2>0)//必能整除,并且最小数应该大于0。 { printf("%d..
2014-03-04 12:13:37 756
原创 写正确函数需要注意的地方:输入一个字符串,打印出该字符串中字符的所有排列
void allPermutations(char* arr, char* desarr, bool* assis, int count, int curindx){ if(curindx==count) { desarr[curindx]=0; printf("%s\n",desarr); return; } for(int i=0;i<count;++i) { i
2014-03-04 12:13:27 910
原创 写正确函数需要注意的地方:链表的合并排序
Node* mergeSort(Node* head, int length){ if(length==0) return NULL; if(length==1) { head->pNext=NULL;//一定要赋值为NULL,否则可能出现死循环。 return head; } int halflength=length/2; Node* halfp=head; fo
2014-03-04 12:12:54 557
原创 操作系统相关知识复习
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑地址也就是在Intel 保护模式下程序执行代码段限
2014-03-04 12:11:58 613
原创 写正确函数需要注意的地方:奇偶数分开,左边偶数,右边奇数。
void oddEvenSort(int* arr,int count){ int left=0; int right=count-1; int midval=arr[left]; while(left<=right) { while(left<=right && arr[right]%2==1) --right; if(left<=right) { arr[l
2014-03-04 12:11:28 917
原创 写正确函数需要注意的地方:给定一个十进制整数N,计算从1开始到N的所有整数出现的“1”的个数
int numOf1(int n){ int factor=1; int count=0; while(n/factor!=0) { int higher=n/(factor*10);//当前位置的高位组成的数字。 int cur=n/factor%10;//当前位置数字 int lower=n%factor;//当前位置的低位组成的数字。 if(cur==0) c
2014-03-04 12:10:58 818
拼图游戏 android
2011-03-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人