关于继承中对象指针的一些问题。
最近在看刘伟老师写的设计模式,看到了合成复用原则这里
http://blog.csdn.net/lovelion/article/details/7563441
我看到了他画的uml类图,我想自己写一写试试能不能实现这种不违反开闭原则添加子类来添加功能。
然后piapiapia的写完了,一运行出问题了
代码如下
本来预期输出的是
basic getConnection()
sub getConnectio()
但是事与愿违,输出的是:

然后我改成将DBUtill类的对象指针来初始化CustomerDAO类的对象,
代码如下:
得到想输出的结果:

这是为什么?本人愚钝求指教。
http://blog.csdn.net/lovelion/article/details/7563441
我看到了他画的uml类图,我想自己写一写试试能不能实现这种不违反开闭原则添加子类来添加功能。
然后piapiapia的写完了,一运行出问题了
代码如下
#include<iostream>
using namespace std;
class DBUtill
{
public:
virtual void getConnection()
{
cout<<"basic getConnection()"<<endl;
}
};
class OracleDBUtill : public DBUtill
{
public:
virtual void getConnection()
{
cout<<"sub getConnection()"<<endl;
}
};
class CustomerDAO
{
private:
DBUtill utill;
public:
CustomerDAO(DBUtill utill)
{
this->utill = utill;
}
~CustomerDAO()
{
}
void addCustomer()
{
utill.getConnection();
}
};
int main()
{
DBUtill d1;
OracleDBUtill od1;
CustomerDAO* c1 = new CustomerDAO(d1);
CustomerDAO* c2 = new CustomerDAO(od1);
c1->addCustomer();
c2->addCustomer();
return 0;
}本来预期输出的是
basic getConnection()
sub getConnectio()
但是事与愿违,输出的是:

然后我改成将DBUtill类的对象指针来初始化CustomerDAO类的对象,
代码如下:
#include<iostream>
using namespace std;
class DBUtill
{
public:
virtual void getConnection()
{
cout<<"basic getConnection()"<<endl;
}
};
class OracleDBUtill : public DBUtill
{
public:
virtual void getConnection()
{
cout<<"sub getConnection()"<<endl;
}
};
class CustomerDAO
{
private:
DBUtill* utill;
public:
CustomerDAO(DBUtill* utill)
{
this->utill = utill;
}
~CustomerDAO()
{
}
void addCustomer()
{
utill->getConnection();
}
};
int main()
{
DBUtill* d1= new DBUtill();
OracleDBUtill* od1 = new OracleDBUtill();
CustomerDAO* c1 = new CustomerDAO(d1);
CustomerDAO* c2 = new CustomerDAO(od1);
c1->addCustomer();
c2->addCustomer();
return 0;
}得到想输出的结果:

这是为什么?本人愚钝求指教。
...全文
相关推荐
易语言传递对象指针源码-易语言
易语言传递对象指针源码
iOS对象指针和基础数据类型的强转详解
最近在做一些小功能,忽然发现有的基础数据转换居然都忘记了。于是想着要赶紧整理下记下来!本文就是记录的一些内容,主要介绍了iOS中对象指针和基础数据类型的强转,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
C++编程思想--多重继承
子对象重叠,虚基类,开销,向上映射,避免MI,修复接口
c++继承中的内存布局
c++继承中的内存布局,c++高手必读,学习com,boost,面向对象必须了解,多重继承等
JS原型与继承解析[代码]
本文详细解析了JavaScript中的原型(prototype)、原型链及其继承机制。首先介绍了原型的基本概念,包括构造函数、实例对象和原型对象之间的关系,并通过代码示例展示了原型对象的公共容器特性。接着阐述了原型链的定义及其在属性查找中的作用,解释了原型链的终点是Object.prototype.__proto__ === null。最后,通过具体示例说明了如何通过原型链实现属性和方法的继承,包括创建Person类和Student类,并演示了继承的实现过程。文章内容深入浅出,适合前端开发者深入理解JavaScript的核心概念。



