一个继承了以自己为模板入参的类,C++是如何构造的

template<typenameT>classA{...}classB:publicA<B>{...}B类是如何构造的?... template<typename T>
class A
{...}

class B:public A<B>
{...}
B类是如何构造的?
展开
 我来答
updowndown
2013-10-29 · 超过14用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:37.2万
展开全部
#include "stdafx.h"
#include <iostream>
using namespace std;

template<typename T>
class A
{
public:
A() { cout << "A construct()" << endl; ++m_nCounter; }
~A() { cout << "A desstruct()" << endl; --m_nCounter; }

public:
void printCount() { cout << m_nCounter << endl; }

private:
static int m_nCounter;
};

template <typename T>
int A<T>::m_nCounter = 0;

class B:public A<B>
{
public:
B() { cout << "B construct()" << endl; }
~B() { cout << "B desstruct()" << endl; }

public:
void printCountOfB() { cout << "Count of B: "; printCount(); }
};

class C:public A<C>
{
public:
C() { cout << "C construct()" << endl; }
~C() { cout << "C desstruct()" << endl; }

public:
void printCountOfC() { cout << "Count of C: "; printCount(); }
};


int main()
{
/// A先于B构造
  B* pB1 = new B;

pB1->printCountOfB();

B* pB2 = new B;

pB2->printCountOfB();

/// B先于A析构
delete pB2;

pB1->printCountOfB();

C* pC1 = new C;
C* pC2 = new C;
C* pC3 = new C;

/// 两个不同的类,其Counter实例互不干扰
pB1->printCountOfB();
pC1->printCountOfC();

delete pB1;
delete pC1;
delete pC2;
delete pC3;

return 0;
}


运行一次就知道构造顺序了。

这是一种取巧的编程方法,用于多个类共享同一功能。


他们说编译不了是对的。用下面的例子,不要在模板类中直接声明类的实例。

template<typename T>
class A
{
public:
A() {}
~A() {}

public:
T m_InstanceOfT;
};

class B:public A<B>
{
public:
B() {}
~B() {}
};

int main()
{
return 0;
}
欢乐多Ek
2013-10-29 · TA获得超过478个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:418万
展开全部
我记得设计模式里面有种模式是这种,不过如果是T组合进去的话,估计构造会陷入无限递归,T以指针形式存在的话,就直接创建4字节指针就行了,先构造A再构造B。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
321珏123
2013-10-29
知道答主
回答量:5
采纳率:0%
帮助的人:8.3万
展开全部
先调用A<B>的构造函数,再调用B的构造函数。所以如果A<B>中含有B类型的成员变量,就会无限递归,编译不了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心中风情4
2013-10-29 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1089万
展开全部
很不懂你的意思啊?详细点?
更多追问追答
追问
B继承了以自己为模板参数的模板类A ,我想知道B类的构造过程
追答
这与模板没啥关系,与
以自己为模板入参
也没啥关系吧

构造顺序跟普通类没啥区别吧,还是 父类(A) ->子类(B)-》本身类(B)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式