首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于类模板与指针的有关问题

2012-07-29 
一个关于类模板与指针的问题如下:class Base{}class D_Base :public Base{}templatetypename Tclass C{p

一个关于类模板与指针的问题
如下:
class Base
{}

class D_Base :public Base
{}

template<typename T>
class C
{
private
T * m_prt;
}

问题如下:
请大家看看,下面这个表达式是否正确?如何从语法的角度进行解释?
C<Base> db = new D_Base();



[解决办法]
public:
T *m_prt;

db.m_prt = new D_Base();

得引出指针m_prt


[解决办法]
没有C(T*){}这样的构造函数就没办法正确。
[解决办法]

C/C++ code
C<Base> db = new D_Base();//左值是c类型对象,右面是D_Base类型对象?这样可以?
[解决办法]
implicit和explicit的区别。
C(T*){}没有加explicit关键字,所以在C<Base> db = new D_Base();中被隐式调用了。
实际上是 C<Base> db(new D_Base());
[解决办法]
去看看c++ prime上面关于explicit关键词的解释
[解决办法]
去看看c++ prime上面关于explicit关键词的解释
[解决办法]
在创建一个简单类对象的时候会调用普通构造函数,db = new D_Base();调用的是赋值构造
[解决办法]
探讨

class Base
{}

class D_Base :public Base
{}

template<typename T>
class C
{
C(){} // 构造函数1
C(T*){} // 构造函数2
private
T * m_prt;
}

C<Base> db; // 此处调用了构造函数1
db = new D_Base(); // 此处调……

[解决办法]
C<Base> db = new D_Base();两边的类型不同,没有重定义的赋值函数或者没有C(T*){}这样的构造函数,是不行的。

热点排行