CNTT4A2 COMMUNITY

Thảo luận học tập


You are not connected. Please login or register

Go downThông điệp [Trang 1 trong tổng số 1 trang]

23/4/2012, 8:15 pm
vudoanbt3
vudoanbt3

Mọi người cho em hỏi chút là e có 1 class a muốn cấp phát động trong hàm main thì làm như thế nào? e có thử như sau nhưng ko dc

class a
{

private:
//Nội dung
public:
//Nội dung
};
int main()
{
a *x;//biến con trỏ x
x=new a[30];//cấp phát 30 phần tử

//nội dung
return 0;
}
Vậy muốn cấp phát thì phải làm ntn?

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà vudoanbt3
24/4/2012, 1:52 pm
kienhl
kienhl

Ở đây ý em muốn là cấp phát bộ nhớ động cho trong hàm main mà giá trị biến trỏ về class đúng không? cho em một đoạn code để làm ví dụ nhé!
Code:

#include "iostream.h"
class crectangle
{
  int width,height;
  public:
  crectangle(int,int);
  int area(void)
      {
        return (width*height);
      }
};
crectangle::crectangle(int a, int b)
{
    width = a;
    height = b;
}
int main()
{
  crectangle rect(3,4);
  crectangle rectb(5,6);
  cout<<"rect area: "<<rect.area()<<endl;
  cout<<"rectb area: "<<rectb.area()<<endl;
}

và đây là cấp phát bộ nhớ với con trỏ và toán tử new
Code:
 
#inlude<iostream.h>
class crectangle
{
  int width, height;
  public:
    void set_values(int,int);
    int area(void)
    {
      return (width+height);
    }
};
void crectangle::set_values(int a, int b)
{
      width=a;
      height=b;
}
int main()
{
      crectangle a,*b,*c;
      crectangle *d=new crectangle[2];
      b=new crectangle;
      c=&a;
      a.set_values(1,2);
      b->set_values(3,4);
      d->set_values(5,6);
      d[1].set_values(7,8);
      cout<<"a area: "<<a.area()<<endl;
      cout<<"b area: "<<b->area()<<endl;
      cout<<"c area: "<<c->area()<<endl;
      cout<<"d[0]area: "<<d[0].area()<<endl;
      cout<<"d[1]area: "<<d[1].area()<<end;;
  return 0;
}
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
24/4/2012, 2:31 pm
whatsltd4us
whatsltd4us

Có phải bạn muốn cấp phát bộ nhớ động cho con trỏ x có kiểu là a.
Thường thì viết như sau :
Code:
a* x=new a[n];
Như trên bạn viết thì có lẽ là đúng, có thể gửi cả code bài hoàn chỉnh lên mình test thử xem thế nào !
http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us
24/4/2012, 8:50 pm
vudoanbt3
vudoanbt3

sao lại lằng nhằng vậy nhỉ?
Sau 1 hồi tìm kiếm e thấy rằng nó làm như sau:
class a
{

private:
//Nội dung
public:
//Nội dung
};
int main()
{
a **x;//biến con trỏ x trỏ đến các con trỏ khác
x=new a*[30];//cấp phát 30 phần tử con trỏ cho con trỏ x
for(int i=0;i<30;i++)
x[i]=new a();//cấp phát mỗi con trỏ trong mảng 1 object
//nội dung
return 0;
}
cái e đang phân vân là
a*[30]
tại sao lại có dấu sao (*) đó nhỉ?
Mọi người giải thích giúp e nhé

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà vudoanbt3
25/4/2012, 3:14 am
whatsltd4us
whatsltd4us

[You must be registered and logged in to see this link.]
vudoanbt3 đã viết:sao lại lằng nhằng vậy nhỉ?
Sau 1 hồi tìm kiếm e thấy rằng nó làm như sau:
class a
{

private:
//Nội dung
public:
//Nội dung
};
int main()
{
a **x;//biến con trỏ x trỏ đến các con trỏ khác
x=new a*[30];//cấp phát 30 phần tử con trỏ cho con trỏ x
for(int i=0;i<30;i++)
x[i]=new a();//cấp phát mỗi con trỏ trong mảng 1 object
//nội dung
return 0;
}
cái e đang phân vân là
a*[30]
tại sao lại có dấu sao (*) đó nhỉ?
Mọi người giải thích giúp e nhé
Đây là dùng con trỏ cấp 2,dùng trong 1 số trường hợp như khai báo ma trận chẳng hạn, còn cấp phát động thì như (x[i]=new a[]) đó. Không biết bạn tìm ở đâu, có điều về khai báo và cấp phát bộ nhớ động thì có lẽ không cần phải bàn nhiều, cấu trúc mình đã nêu trên kia, còn nếu bạn nói không sử dụng được thì hãy đưa code lỗi lên đây mình test nhé. Đôi khi nó không phải sai ở phần cấp phát, và có thể yêu cầu của thuật toán nó cũng khác ! Không biết ý mình như vậy có đúng không, dựa vào mấy kiến thức đã được học :|
http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us
25/4/2012, 12:24 pm
vudoanbt3
vudoanbt3

bạn nói rõ về cái con trỏ cấp 2 dc ko?
Nhưng cấp phát như bạn thì ko chạy dc
#include<iostream.h>
#include<string.h>
class dt{
protected:
char ten_hang[30];
int don_gia;
public:
void nhap()
{
http://cin.ignore(1);
cout<<"Nhap ten hang:";cin.getline(ten_hang,30);
cout<<"Nhap don gia:";cin>>don_gia;
}
void xuat()
{
cout<<"Ten hang:"<<ten_hang<<endl;
cout<<"Don gia:"<<don_gia<<endl;
}
dt(){}
~dt(){cout<<"Khoi chay ham huy..."<<endl;}
};
class fax:public dt{
protected:
char loai_muc[30];
int toc_do;
public:
friend ostream &operator<<(ostream&ra,fax&f)
{
ra<<"Ten hang: "<<f.ten_hang<<endl;
ra<<"Don gia: "<<f.don_gia<<endl;
ra<<"Loai muc: "<<f.loai_muc<<endl;
ra<<"Toc do: "<<f.toc_do<<endl;
return ra;
}
friend istream&operator>>(istream&vao,fax&f)
{
cin.ignore(1);
f.nhap();
cout<<"Nhap Loai muc:";vao.ignore(1);//loai bo enter
vao.getline(f.loai_muc,30);
cout<<"Nhap toc do:";vao>>f.toc_do;
return vao;
}
int check()
{
if(!strcmp(loai_muc,"giay nhiet")) return 1;
else
return 0;
}


};
int main()
{
fax **a=new fax*[3];
for(int i=0;i<3;i++) a[i]=new fax();
int count=0;
for(int i=0;i<3;i++)
cin>>*a[i];
cout<<"Danh sach may fax chiu nhiet"<<endl;
for(int i=0;i<3;i++)
if(a[i]->check())
{
cout<<*a[i]<<endl;
count++;

};
if(!count) cout<<"Khong co my fax chiu nhiet"<<endl;

return 0;
}

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà vudoanbt3
25/4/2012, 8:44 pm
whatsltd4us
whatsltd4us

Đây là hàm main() đã sửa :
Code:
int main()
{
fax *a=new fax[3];
//for(int i=0;i<3;i++) a[i]=new fax();
int count=0;
for(int i=0;i<3;i++)
cin>>a[i];
cout<<"Danh sach may fax chiu nhiet"<<endl;
for(i=0;i<3;i++)
if(a[i].check())
{
cout<<a[i]<<endl;
count++;

};
if(!count) cout<<"Khong co my fax chiu nhiet"<<endl;

return 0;
}

Như trên mình đã sửa lại, hình như bạn dùng C free. Nếu có thể bạn hãy thử dùng Dev-C++
Về con trỏ, 1 con trỏ sẽ là mảng 1 chiều, con trỏ cấp 2 sẽ trỏ đến mảng 2 chiều, ...

http://vdvinh-nd.blogspot.com

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà whatsltd4us

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Sponsored content

Về Đầu TrangThông điệp [Trang 1 trong tổng số 1 trang]

« Xem bài trước | Xem bài kế tiếp »

Bài viết mới cùng chuyên mục

    Bài viết liên quan với Cấp phát động class

      Quyền hạn của bạn:

      Bạn không có quyền trả lời bài viết