C++一个类的成员里定义了另一个类作为对象,并且用的数组,那我要怎么写构造,注意看注释

比如我写了一个类
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类的编译会有问题。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-11
我看是你T前面的冒号打错了吧,打成中文的了
第2个回答  2016-05-11
没有问题,可能是其他地方写错了追问

你会么?这是有子对象的派生类的构造函数

追答

确实不是你构造函数的问题啊,是你T类的构造函数少了无参的情况,而你子类RE里又用了T s,所以肯定不对啊,然后你注释的那一行的冒号怎么是中文的????

追问

student1(int n,string nam,int n1,string nam1,int a ,stringad):monitor(n1,nam1),student(n,nam)这是普通的格式,里面student是基类,加1是派生类,monitor是子对象,然后他不是数组,然后我用的是数组,那我这边怎么初始化?像普通对象的话无法初始化

追答

我怎么不懂你在说什么,完整的代码也不发

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网