永发信息网

指向类的指针问题

答案:3  悬赏:40  手机版
解决时间 2021-12-31 23:16
  • 提问者网友:辞取
  • 2021-12-31 08:33
我的程序中有一个类class A,而在A的成员中又有类class B
如:class A
{
public:
B b;
........
}
而class B类与class A类的构造函数都是有参数的。
现在定义一个指向A的指针并开辟空间: A *a = new A[5];
程序报错,说A没有无参数的构造函数,请问怎么在开辟空间的时候给A的构造函数附上参数?
注意:仅仅声明一个A的无参数构造函数是不行的,因为B也需要参数来构造
求大神~~
最佳答案
  • 五星知识达人网友:妄饮晩冬酒
  • 2021-12-31 09:31
class B
{
public:
int b;
B(){}
B(int b1){b = b1;}
};

class A
{
public:
int a;
B b;
A(){}
A(int a1, int b1):b(b1){a = a1;}
};

int main()
{
A* pa = new A[5];
return 0;
}

必须要有无参数的构造函数,A B都要有
只有有参构造函数,不能声明对象数组。必须有无参构造函数
即申明对象数组时,不能使用有参构造函数,初始化数据的传递
需要另外对每个数组元素单个调用初始化函数。这样也有好处每
个数组元素都可以有自己的初始化参数。

可以把有参构造函数完成的功能分开成不需要参数的部分和需要参数的部分
不需要参数的部分,写成无参构造函数,需要参数的部分写成初始化函数,
或者干脆无参构造函数写成空函数,什么都不干,把所有的任务交给初始化函数完成。
全部回答
  • 1楼网友:末日狂欢
  • 2021-12-31 10:19
假设有个 person 类,是基类,包括了人的一些基本属性和方法。。 再假设有个 student 类,派生于 person 类,新增了一个 “学号” 成员。。 person *p = new student(),指向基类的指针去指向派生类,这时可以,因为 p 是 person 的指针,所以 p 里面是没有 “学号” 这个成员的,也就无法访问 student 新增的 “学号” 成员,如果试图访问编译的时候就报错了。。 如果反过来,student *s = new person(),s 有 “学号” 成员,编译器认为访问 “学号” 这个成员是没有问题的,但是实际对象是 person,是没有这个成员的,这样的话在运行期间实际访问到哪部分的内存也就不得而知了。。这样是很危险的。。 综上所述,反之不行。。
  • 2楼网友:封刀令
  • 2021-12-31 09:44
用这个A *a=new A(5); 这是定义一个对象指针并开辟了一个空间,还传递了一个参数、 你的是[],是在定义一个对象数组,并不是给构造函数传递一个参数。 你看看是不是这个问题。、
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯