- 博客(29)
- 资源 (21)
- 收藏
- 关注
原创 基类列表中不能有重复出现的基类
派生类的基类列表中不能有重复出现的基类。下列代码会报错:#include using namespace std;class Base1{};class Base2{};class Drived: public Base1, public Base2, public Base2{};void main(){ Drived drived;}
2013-04-21 10:07:02 875
原创 c++ primer 17.22 实验代码
#include using namespace std;namespace primerLib{ void com(){ cout << "com()" << endl; } void com(const void *){ cout << "com(const void *)" << endl; }}void com(int){ cout << "com(int)"
2013-04-21 09:51:58 826
转载 auto_ptr解析
auto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”裸“指针那样非常小心的使用它才能保证不出错,以至于它甚至无法适用于同是标准库中的那么多的容器和一些算法,但即使如此,我们仍然不能否认这个
2013-04-20 17:26:39 551
原创 异常的抛出基本问题
1.使用throw exception object ;语句进行异常的抛出,异常对象可以是内置数据类型,也可以是自定义数据类型或者标准库中的异常数据类型;2.3.catch匹配次序是一次配中,随后则不再匹配。所以,对于一个派生类对象,catch字句的放置顺序就要留意了,应该将catch派生类异常对象的语句放置在catch基类异常对象语句的前面。4.可以使用throw;语句二次抛出异常。
2013-04-20 15:25:28 860
原创 构造函数和析构函数的相互调用
看《代码大全》的时候,看到这么个问题,所以特意写代码进行了下测试。(VC 6.0 WIN XP SP3 32BIT)代码如下:#include using namespace std;class Test{public: Test(){ // ~Test(); cout << "this is constructors." << endl; } ~Test()
2013-04-18 09:15:56 931
原创 类的inline函数
inline关键词在类的函数声明或者定义部分出现一次就可以了,当然出现两次岂不是更加完整吗!下列代码严重了这点(VC 6.0 WIN XP 32BIT)#include using namespace std;class Test{public: Test(){} ~Test(){} void show();};inline void Test::show(){
2013-04-17 20:21:36 730
原创 const虚函数
在C++中,对于两个函数,一个有const修饰,一个没有const修饰,认为这两个函数是不同的函数。而虚函数的要求是,函数原型相同,函数原型包括:函数返回值、函数名、参数列表、const修饰符。这里const修饰符包括函数返回值的修饰,函数形参的修饰,函数本身的修饰。只要有一处const没有对上 ,那么就不是虚函数的重载,而是发生了同名覆盖现象。这个与编译器的工作原理有关。所以对于基类的c
2013-04-17 10:14:41 4218
原创 重载函数的继承问题
如果基类有很多歌重载函数(注意:重载函数应该是属于同一个作用域的),那么子类要想使用基类的这些重载函数的话,要么一个函数都不定义,要么重新定义所有的重载函数。因为如果只定义一个或者几个,都会导致”同名覆盖“,而无法达到目的。
2013-04-17 09:43:08 801
原创 类的同名覆盖和函数重载
有下列代码:#include using namespace std;struct Base{ void foo (int){};};struct Derived: public Base{ void foo(string){};};void main(){ Derived d; d.foo(1024);}这是《C++ primer》题15.23的一
2013-04-17 09:26:00 1051 1
原创 C++类继承中的访问控制符可以省去
C++类继承中的访问控制符可以省去:1.采用class关键字进行的类继承默认采用继承方式是private,如下例:#include using namespace std;class TestA{};class TestB: TestA{};void main(){ TestA a; TestB b;} 2.采用sruct关键字进行的类继承默认采用继承方式
2013-04-15 16:15:53 874
原创 用测试程序分析类的内存布局2
下列代码:#include using namespace std;class Test{public: int a; char b;//注释掉试试 int c;//注释掉试试 char d; char e;};void main(){ cout << sizeof(Test) << endl;}我的编译环境是VC 6.0 WIN XP 32位.
2013-04-15 15:04:05 624
原创 虚函数的实现机制
这里解释的是虚函数的机制。涉及的比较底层。下列代码:#include using namespace std;class Test{public: virtual void display()const;};void Test::display() const{//此处的const不要忘记了 cout << "this is display." << endl;}
2013-04-11 16:38:49 675
原创 继承类与基类内存分配规则
其实我一直挺困惑继承类与基类之间的内存分配是怎么进行的。继承类是复制一份基类的数据成员还是在基类的数据成员后面加上自己的数据成员呢?我试图从下面的例子,得到几分蛛丝马迹。#include using namespace std;class A{public: A(){a = 10;} int a;};class B: public A{public: int b;
2013-04-11 15:18:42 1020
原创 void指针
1.void指针可以指向任意数据类型,即任意数据类型的指针都可以赋值给void指针;void要转换为其他类型的指针的话就要进行强制转换,并且这个转换过程是很容易出现问题的,要谨慎使用;2.void指针是不可以间接引用的,下来代码不能通过编译:#include using namespace std;void main(){ int value = 10; void
2013-04-11 11:41:44 727
原创 c++类内存布局分配规则
今天阅读《深度探索c++对象模型》,对c++类内存布局分配规则有了深刻的理解。之前自己写过测试程序测试内存布局的分配规则,书中总结的规律更加的完整:如果类不含有虚函数的话,那么使用sizeof(类名)得出的大小是类的非static成员的占用空间大小(注意内存对齐带来的消耗);如果类含有虚函数(不管数目是多少),那么使用sizeof(类名)得出的大小是类的飞static成员+4的值,这个
2013-04-11 11:22:04 993
原创 多态的实现手段
1.基类含有虚函数;2.使用new创建基类对象和子类对象,结果均保留在基类指针变量中;3.通过基类指针变量调用函数即可事实多态了。如下列示例代码:#include using namespace std;class BaseTest{public: BaseTest(){} BaseTest(const BaseTest&){} BaseTest operator=
2013-04-11 10:53:17 686
原创 C++的四个组成部分
在网上看到的一个帖子,然后觉得十分的有意思,就记录在这里。C++四个组成部分包括:better C、ADT、OO、GP。第一个是加强板C,例如函数重载、引用、默认参数等等;第二个ADT是抽象数据类型,就是单纯的class,即对象;第三个OO则是面向对象,就是ADT之间 的继承、派生、虚函数等等;第四个GP,也就是范型编程,就是C++的顶级技术模板技术了,STL到处充斥着GP技术
2013-04-11 10:35:13 2436 1
原创 c++中的struct和class
我们的教材大致是说,在c++ 中struct和class的不同在于访问控制符上的默认值不同。仅仅是这个深度而已。访问控制符上的处理不同,是因为c++要与c在使用struct时保持兼容性。在c++中,struct在c语言中的使用方式不仅仅被保留下来,同时还赋予了新的特性。见下列代码:#include using namespace std;struct Test{public:
2013-04-11 10:18:59 671
原创 带退出的循环体
#include using namespace std;void main(){ char ch; //first method begin cout << "please input ch(first): "; cin >> ch; cout << endl; while(ch != 'q'){ cout << "please input ch(first): ";
2013-04-10 15:59:14 975
原创 函数对象
让对象表现的和函数一样,这种技术在STL的算法库中满是遍布。《STL源码剖析》将函数对象翻译为”仿函数“。函数对象是这样的类的对象,这个类重载了函数调用运算符,即( )运算符。假设类Test有对象test,那么test(10)类的调用就类似函数调用,把这种情况称为函数对象。下列是一个示例代码:#include #include using namespace std;class
2013-04-10 11:38:12 638
原创 赋值运算符重载注意事项
1.赋值操作符重载函数必须声明为成员函数;2.赋值操作符重载函数的返回值必须是*this,即当前对象的引用。下面是一个示例代码:#include using namespace std;enum Result{ FAIL = 0, TRUE = 1};class Test{public: Test(){ value = 0; success = FAIL;
2013-04-10 10:04:37 868
原创 构造函数是支持手动调用的
在阅读《C++ primer》的时候,注意到,构造函数是可以手动调用的。以前没有怎么留意这个问题。这里做个记录。首先,手动调用构造函数系统实际上是创建了一个临时对象的,如果不保存这个临时对象,那么之后是无法使用这个对象的。采用手动调用构造函数是一种初始化对象的方式,《C++ primer》中使用的情景是,当cin的数据不合法时就调用构造函数初始化一个默认的对象出来。构造函数的手动调用的
2013-04-10 09:46:26 3276
原创 C++输入输出运算符重载注意事项
1.输出运算符重载声明方法:ostream& operator因为ostream对象是不支持复制的,所以第一个参数和返回的参数均是引用。第二个参数是操作对象,为了避免传入对象时发生对象的复制(即调用复制构造函数),这里也使用引用。又为了避免修改这个对象,所以使用const限定。2.输入运算符重载声明方法:istream& operator>> (istream &, Test &)
2013-04-10 09:26:33 908
原创 项目开发感悟记录六:typedef的神功
这是一个小小的记录,因为这个错误吃过很多亏,所以记录下来。问题是这样的,我们不同的开发使用ID的时候,有人使用了LONG类型,有人使用INT类型,虽然这两者之间是可以转换的,但是带来很多的不便,而如果同意使用typedef定义的数据类型,然后修改只修改这一句话,那么问题就简单很多,程序的维护也变得十分的简单。
2013-04-09 15:32:53 593
原创 为什么使用数组?
数组是一组相同数据类型数据的集合。学习数组的时候知道数组的优点是可以随机访问。但是我们面临的情景是有多少需要这种优秀的随机访问呢?这种随机性在我们实际的生产工作中实际上是不多见的。《代码大全》中推荐,考虑用容器取代数组,这样为随机的东西添加上规则,这样的设计是可靠的,消除 了随机引入的不可靠性。
2013-04-09 15:25:12 2003
原创 c++析构对象数组的顺序
C++ 析构函数是在对象被撤销时自动执行的,这里的“对象被撤销时”包括:1.对象生命期结束;2.对象被delete回收。对于数组对象的回收顺序遵循“FILO”的原则,即下标最小的对象在最后被析构掉。下列是个例子:#include using namespace std;class A{public: A(){ cout << "con cout = " << count++ <<
2013-04-09 09:46:42 1506
原创 static数据成员的初始化规则
static数据成员一定要遵循“类内声明,类外定义”的规定。而初始化只要是放在定义语句中就必定不会出错;只有当static数据成员同时又是const成员时,就可以在声明的时候为其初始化,否则一律要在定义语句中进行初始化;
2013-04-08 11:10:19 932
原创 c++的static关键词注意事项
static只能出现在类体中,类外不出现static关键词,static数据成员和static函数成员都遵循这个规定;static的访问控制有效;static数据成员必须在类体外定义,类体内只是声明而不包括定义的,这里要严格理解声明语句和定义语句的不同了。如下列代码:class A{public:static int a;};int A::a = 10;代码static int a
2013-04-08 11:04:46 710
原创 C++的friend关键词的注意事项
1.friend关键词只能出现在类定义的内部;2.友元的声明可以出现在类中的任何地方;3.友元声明语句不受访问控制的影响;4.友元可以是普通函数,类,或者类成员函数;
2013-04-08 10:59:45 649
Athena Framework developer Guide
2013-07-07
JSP™ ApplicationP
2011-11-06
apache+tomcat+geoserver地图配置文档
2011-04-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人