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]

on 23/4/2012, 8:15 pm

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
on 24/4/2012, 1:52 pm

Ở đâ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;
}

__________________________________
I have a dream! It'stechnology hardware & software.
And......Prime Minister of a country in technology! [You must be registered and logged in to see this image.] [You must be registered and logged in to see this image.]
http://tin4a2uneti.tk

Thích

Báo xấu [0]

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

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 !

__________________________________
Only You ...
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this image.]


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
on 24/4/2012, 8:50 pm

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
on 25/4/2012, 3:14 am

[You must be registered and logged in to see this image.]
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 :|

__________________________________
Only You ...
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this image.]


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
on 25/4/2012, 12:24 pm

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
on 25/4/2012, 8:44 pm

Đâ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, ...


__________________________________
Only You ...
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this image.]


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
Today at 1:36 am

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