你好球員在我的C++程序我有四個類(A,B,C,d)模板指針C++數組?
- A是基類
- 乙從A
- Ç繼承甲
- d繼承的B
他們都繼承是模板類template<class Type>
和他們每個人都有,它打印的私有成員,它繼承的類的私有成員的打印方法。所以B會打印B私人成員和私人成員,C會打印C私人成員和私人成員,D會打印它的私人成員和B,私人成員。
在主函數中,我想爲每個類的對象有3個位置的類A創建一個指針數組,然後我想循環每個對象的打印方法。
問題是當我將類更改爲模板類時出現錯誤消息,說「我的類沒有構造函數」;但是他們確實有他們。
這裏是我的代碼請幫助(注意我評論的地方發生的錯誤你):
#include <iostream>
#include <string>
using namespace std;
template <class Type>
class A
{
public:
virtual void print()
{
cout<<"the base class (A) private (x) is : "<<x<<endl;
}
A(Type X = 0)
{
x = X;
}
void setX(Type X)
{
x = X;
}
Type getX() const
{
return x;
}
private:
Type x;
};
template <class Type>
class B:public A
{
public:
B(Type X = 0,Type Y = 0)
{
setX(X);
y = Y;
}
void setY(Type Y)
{
y = Y;
}
Type getY() const
{
return y;
}
void print()
{
A::print();
cout<<"private (y) in class (B) is : "<<getY()<<endl;
}
private:
Type y;
};
template <class Type>
class C:public A
{
public:
C(Type X = 0,Type Z = 0)
{
setX(X);
z = Z;
}
void setZ(Type Z)
{
z = Z;
}
Type getZ() const
{
return z;
}
void print()
{
A::print();
cout<<"private (z) in class (C) is : "<<getZ()<<endl<<endl;
}
private:
Type z;
};
template <class Type>
class D:public B
{
public:
D(Type X = 0,Type Y = 0,Type W = 0)
{
setX(X);
setY(Y);
w = W;
}
void setW(Type W)
{
w = W;
}
Type getW() const
{
return w;
}
void print()
{
B::print();
cout<<"private (w) in class (D) is : "<<getW()<<endl;
}
private:
Type w;
};
void main()
{
A<int>* arrayOfPointers[3];
arrayOfPointers[0] = new B(1,100);//error here
arrayOfPointers[1] = new C(2,200);//error here
arrayOfPointers[2] = new D(3,300,3000);//error here
for(int i = 0 ; i<3;i++)
{
cout<<typeid(*arrayOfPointers[i]).name()<<" Print method : \n"<<endl;
arrayOfPointers[i]->print();
cout<<"**********************\n"<<endl;
}
}
在SO上發佈時,嘗試拿出仍然顯示錯誤的最小示例,並提供確切的錯誤消息。你可能只需要A和B在這裏產生錯誤,所以你可以減少一半的代碼。 –
在'B類:公共A''你從什麼'A'繼承?由於'A'是一個模板,它的名字是不夠的。 – NathanOliver
我覺得'所有這些都是模板課程'都是你所面臨的誤解的表現。他們是班級模板。這意味着如果你有'template class A'那麼'A'本身不是一個類。只有你指定了所有的模板參數,它纔會成爲一個真正的類。所以'A '就是一個例子。 –
PeterT