2013年6月4日
摘要: 在C++中,派生类不应该对从基类继承的non-virtual函数重新定义,首先看下面一段代码: 1 class B 2 { 3 public: 4 void mf(); 5 ... 6 }; 7 8 class D:public B 9 {10 ...11 };12 13 D x;14 B* pb = &x;15 pb->mf();16 17 D* pd = &x;18 pd->mf();上面的代码中第15行和第18行调用的函数都是mf,且pb和pd都是指向对象D的,那么这两次调用是否是同一个函数呢?答案是不一定,因为如果D中重新定义了mf函数,那么15行调用的是B 阅读全文
posted @ 2013-06-04 22:05 Sophia-呵呵小猪 阅读(167) 评论(0) 推荐(0) 编辑
摘要: C++的纯虚函数导致声明它的类成为抽象类,即不可以实例化,派生于这个基类的类必须重新声明所有的纯虚函数。通常纯虚函数不在基类中定义,所以派生类实际上是继承了这些纯虚函数形式的接口,它告诉派生类:你必须实现这些纯虚函数的接口,但是具体的实现方式我不干涉,由你决定!例如在绘图基类Shape中有一个纯虚函数为draw,对于正方形、圆形等要求必须有一个对应的draw函数,但具体的draw由具体的派生类决定,基类函数只是告诉你必须声明和定义这个draw函数。当然,纯虚函数在基类中也是可以定义的,但对它的调用需要由类名进行指定,例如:1 Shape* re = new Rectangle;2 re-> 阅读全文
posted @ 2013-06-04 20:26 Sophia-呵呵小猪 阅读(863) 评论(0) 推荐(0) 编辑
摘要: 1)public继承中解决名称遮掩的方法——引入using声明式所谓名称遮掩是指如果变量或函数的名称相同时,局部的会遮掩外围的,派生类会遮掩基类的,如: 1 class Base 2 { 3 private: 4 int x; 5 public: 6 virtual void mf1() = 0; 7 virtual void mf1(int); 8 virtual void mf2(); 9 void mf3();10 void mf3(double);11 ...12 };13 14 class Derived : public Base15 {1... 阅读全文
posted @ 2013-06-04 16:59 Sophia-呵呵小猪 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 1)文件间存在的编译依存关系在C++中,如果没有将接口和实现分离,那么在修改起一个成分,就有可能导致编译时许多文件的重新编译,如定义类如下: 1 class Person 2 { 3 public: 4 Person(const string& name, const Date& birthday, const Address& addr); 5 string name() const; 6 string birthDate() const; 7 string address() const; 8 private: 9 string theN... 阅读全文
posted @ 2013-06-04 14:46 Sophia-呵呵小猪 阅读(463) 评论(0) 推荐(0) 编辑