注册 登录
编程论坛 C语言论坛

c语言设计程序,没有出结果

vgytu 发布于 2020-04-27 18:10, 3266 次点击
#include <iostream>
using namespace std;
class Test{
public:
    int init(int a,int b){
        data=new int data[a];
        for(int i=0;i<a;i++){
            data+i=b;
        }   
    }
    print(){
        while(this->data!=NULL){
            cout<<*data<<endl;
        }
    }
    int *data;
}

int main(){
    Test a;
    a.init();
    a.print();
    return 0;   
}
题目
2. 下面是一个类的测试程序,设计出能使用如下测试程序的类。
int main()
{
   Test a;
   a.init(10,20);
   a.print();
  return 0;
} 
12 回复
#2
wmf20142020-04-27 19:26
应该有句data++,否则死循环了。
#3
vgytu2020-04-27 20:08
好的,谢谢指导
#4
吕孟伟2020-04-27 22:29
程序代码:
#include <iostream>
using namespace std;
class Test{
public:
    void init(int a,int b){
        data = new int[a]();
        for(int i=0;i<a;i++){
            *data+=b;
        }  
        datalast = &data[a];
    }
    void print(){
        
        while(this->data != datalast){
            cout<< *data << endl;
            ++data;
        }
        delete [] data;
    }
   
    private:
    int* data;
    int* datalast;//指向data尾元素的下一位置的指针
};

int main(){
    Test a;
    a.init(10,20);
    a.print();
    return 0;   
}
#5
vgytu2020-04-27 23:06
好牛啊,感谢4楼,感谢3楼,
data = new int[a]();以为现有的知识还不能拜读,我把他理解为
data = new int;可以吗?感谢
#6
rjsp2020-04-28 08:34
以下是引用vgytu在2020-4-27 23:06:53的发言:

好牛啊,感谢4楼,感谢3楼,
data = new int[a]();以为现有的知识还不能拜读,我把他理解为
data = new int;可以吗?感谢

不可以,前者操作符是 new[],后者操作符是 new。完全不相干。
#7
vgytu2020-04-28 09:40
回复6楼,哦哦,谢谢6楼的回答,我就想着date有点像
int tem=0;
tem+=b,然后叠加10次b
我看四楼的代码进行了取消引用操作,就相当于tem[0]+=b;吗?
print函数里有点像迭代器,从第一个到最后一个并打印,实质性不应该只是a[0]进行了操作吗?
然后就想着是否可以把数组形式换成单一变量?也就是new int;
不过这句
data = new int[a]();确实很难拜读,大神知道后面跟着的括号是什么意思吗?感谢
c语言没学多久
#8
rjsp2020-04-28 10:01
以下是引用vgytu在2020-4-28 09:40:03的发言:

c语言没学多久
你这不是“c语言”,而是“C++语言”。虽然出题者水平很差,把C++弄得跟C一样,四不像吧。

你没有给出题目要求,假如题目要求是打印出10个20的话,那代码应该是
程序代码:
#include <iostream>
using namespace std;

class Test
{
public:
    Test() : size_(), data_()
    {
    }
    Test( const Test& rhs ) : size_(rhs.size_), data_(new int[rhs.size_])
    {
        for( size_t i=0; i!=size_; ++i )
            data_[i] = rhs.data_[i];
    }
    Test& operator=( const Test& rhs )
    {
        if( this != &rhs )
        {
            delete[] data_;
            size_ = rhs.size_;
            data_ = new int[rhs.size_];
            for( size_t i=0; i!=size_; ++i )
                data_[i] = rhs.data_[i];
        }
        return *this;
    }
    ~Test()
    {
        delete[] data_;
    }

    void init( size_t size, int value )
    {
        delete[] data_;
        size_ = size;
        data_ = new int[size];
        for( size_t i=0; i!=size_; ++i )
            data_[i] = value;
    }

    void print() const
    {
        for( size_t i=0; i!=size_; ++i )
            cout << data_[i] << '\n';
    }

private:
    size_t size_;
    int* data_;
};

int main( void )
{
    Test a;
    a.init(10,20);
    a.print();
    return 0;
}




#9
vgytu2020-04-28 10:04
4楼?你这句data = new int[a]();确实很难拜读,能让小弟我圣经式的拜读吗,让我感受一下倾盆大雨般的知识洗礼吗?
#10
vgytu2020-04-28 10:10
回复8楼,喜欢您的说话风格,出题者只是在考验答题者的水平,我的水平只能做a+b,您这代码高手代码,让我跪读几天,再来个知识总结
#11
吕孟伟2020-04-28 11:04
回复 9楼 vgytu
熟悉一下C++语法就很好懂了。
给指针data,new一个长度为a的数组,并将元素初始化0。
建议你看r神的代码,从一个类的构造、析构等函数做起。
#12
vgytu2020-04-28 11:17
感谢十一楼的耐心指导,r神是8楼吗?嗯嗯,我会看的,8楼是一位很好的灵魂导师,
对于动态内存我不熟悉,只局限在动态内存的单一变量的初始化
比如int *p=new int(3),对于数组的初始化我还是未认知状态,感谢
#13
vgytu2020-04-28 11:56
回复11楼刚刚查了资料,这种写法
int *array{ new int[length]{} };
和您的data = new int[a]();这种写法有点类似?应该和您的思想一致吧
1