吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2450|回复: 3
收起左侧

[C&C++ 转载] 请高手帮我看看这个指针数组出什么问题了?

[复制链接]
jessylake 发表于 2017-12-26 11:06
[C++] 纯文本查看 复制代码
class Parent
{
public:
	Parent(int a)
	{
		this->a = a;
	}

	virtual void print()
	{
		cout << "Parent::print a = " << a << endl;
	}
	int a;
};

class Child :public Parent
{
public:
	Child(int a) :Parent(a)
	{

	}

	virtual void print()
	{
		cout << "Child::print a = " << a << endl;
	}
	int b;				
};

int main(void)
{
	Child** pChildArray = new Child*[3];
	for (int i = 0; i < 3; i++){
		pChildArray[i] = new Child(i);
	}

	Child *cp;
	int i;
	for (cp = pChildArray[0], i = 0; i < 3; i++, cp++){
		cp->print();
	}

	for (int i = 0; i < 3; i++)
	{
		delete pChildArray[i];
	}
	delete[] pChildArray;

	return 0;
}


子类指针cp++后怎么不能输出下一个子类对象?怎么回事?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

q30416657 发表于 2017-12-26 12:14
        for (cp = pChildArray[0], i = 0; i < 3; i++, cp=pChildArray[i]) {
                cp->print();
        }

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
jessylake + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| jessylake 发表于 2017-12-26 12:35
q30416657 发表于 2017-12-26 12:14
for (cp = pChildArray[0], i = 0; i < 3; i++, cp=pChildArray) {
                cp->print();
        }

谢谢,为什么cp++不行呢?我是照着下面这段代码改写的:
[C++] 纯文本查看 复制代码
class Parent
{
public:
        Parent(int a)
        {
                this->a = a;
        }

        virtual void print()
        {
                cout << "Parent::print a = " << a << endl;
        }
        int a;
};

class Child :public Parent
{
public:
        Child(int a) :Parent(a)
        {

        }

        virtual void print()
        {
                cout << "Child::print a = " << a << endl;
        }
        int b;
};

int main(void)
{
        Child array[] = { Child(0), Child(1), Child(2) };

        Child *cp;
        int i;
        for (cp = &array[0], i = 0; i < 3; i++, cp++){
                cp->print();
        }

        return 0;
}
 楼主| jessylake 发表于 2017-12-26 13:44
jessylake 发表于 2017-12-26 12:35
谢谢,为什么cp++不行呢?我是照着下面这段代码改写的:
[mw_shl_code=cpp,true]class Parent
{

想明白了,这个子类指针指向的是数组中连续排列的子类对象,这里指针步长就是 sizeof(Child) ,正好可以通过++访问每个数组成员,而指针数组中每个元素的值是在堆中开辟的放置子类对象的空间的首地址,这些首地址并非像数组元素那样按照数组元素的大小连续排列的,所以按照子类指针的步长就出错误了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表