C++一个类的成员里定义了另一个类作为对象,并且用的数组,那我要怎么写构造,注意看注释 100
比如我写了一个类classT{public:T(charo[],intr,doublet,doublea):e(r),ekj(t),k(a){strcpy(a,o);}p...
比如我写了一个类
class T
{
public:
T(char o[],int r,double t,double a):e(r),ekj(t),k(a)
{
strcpy(a,o);
}
protected:char a[10];int e,double ekj,double k;
}
class RE:public T
{
public:RE(char o[],int r,double t,double a):T(o,r,t,a){}//这一行有问题我要怎么写类对象的初始化
protected:
T s[100];
} 展开
class T
{
public:
T(char o[],int r,double t,double a):e(r),ekj(t),k(a)
{
strcpy(a,o);
}
protected:char a[10];int e,double ekj,double k;
}
class RE:public T
{
public:RE(char o[],int r,double t,double a):T(o,r,t,a){}//这一行有问题我要怎么写类对象的初始化
protected:
T s[100];
} 展开
展开全部
你好,T s[100] 这样写,s会调用T的默认构造函数,然而你并没有给出。所以这样写不行。如果想初始化数组,可以考虑用vector,例如
#include <string>
#include <iostream>
#include <vector>
using namespace std;
class T
{
public:
T(char o[], int r, double t, double a)
:e(r), ekj(t), k(a)
{
strcpy(m_a, o);
}
protected:
char m_a[10];
int e;
double ekj;
double k;
};
class RE :public T
{
public:
RE(char o[], int r, double t, double a)
:s(100, T(o, r, t, a)) // 初始化s,s有100个元素
,T(o,r,t,a) // 调用基类构造函数
{}
protected:
vector<T> s;
//T s[100];
};
望采纳,谢谢
追问
普通的例子和格式,下面的monitor就是student1里的子对象,来自student,但是他不是数组,如果是数组那要怎么写?student1(int n,string nam,int n1,string nam1,int a ,stringad):monitor(n1,nam1),student(n,nam)
追答
如果非要用数组的话,你要满足两个条件:
1. 给基类一个默认构造函数,比如你的T类中要有一个
T(){} // T的默认构造函数
2. 不能用list initialization,需要在子类的构造函数中逐一对数组的每一个元素初始化
RE::RE(char o[], int r, double t, double a)
{
for(int i=0; i<100; i++)
s[i] = T(..)
...
}
不然RE类的编译会有问题。
展开全部
我看是你T前面的冒号打错了吧,打成中文的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有问题,可能是其他地方写错了
更多追问追答
追问
你会么?这是有子对象的派生类的构造函数
追答
确实不是你构造函数的问题啊,是你T类的构造函数少了无参的情况,而你子类RE里又用了T s,所以肯定不对啊,然后你注释的那一行的冒号怎么是中文的????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询