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];
}
展开
 我来答
泷皖莲6
2016-05-11 · TA获得超过622个赞
知道小有建树答主
回答量:304
采纳率:0%
帮助的人:314万
展开全部

你好,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类的编译会有问题。

砍侃看
2016-05-11 · TA获得超过6153个赞
知道大有可为答主
回答量:6584
采纳率:69%
帮助的人:2109万
展开全部
我看是你T前面的冒号打错了吧,打成中文的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PLCokeklc
2016-05-11 · TA获得超过553个赞
知道小有建树答主
回答量:500
采纳率:82%
帮助的人:274万
展开全部
没有问题,可能是其他地方写错了
更多追问追答
追问
你会么?这是有子对象的派生类的构造函数
追答
确实不是你构造函数的问题啊,是你T类的构造函数少了无参的情况,而你子类RE里又用了T s,所以肯定不对啊,然后你注释的那一行的冒号怎么是中文的????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式