Chủ đề: Lập trình hướng đối tượng
-
22-09-2014, 10:11 AM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lập trình hướng đối tượng
Đề: Nhập tọa độ tâm và quỷ đạo đường tròn. Xuất ra tọa độ tâm, quỷ đạo, chu vi , diện tích của đường tròn
Code của mình máy báo cần phải tạo lại class Point. Xin cho mình biết sai chổ nào. Xin cảm ơn!!!
//Point.h
#include <iostream>
using namespace std;
class Point
{
private:
double x;
double y;
public:
Point(double xx=0, double yy=0):x(xx),y(yy){};
friend istream & operator >>(istream &, Point &);
friend ostream & operator <<(ostream &, Point &);
double distance(Point);
};
//Point.cpp
#include "Point.h"
istream & operator >>(istream &in, Point &P)
{
cout<<"x: ";
in>>P.x;
cout<<"y: ";
in>>P.y;
return in;
}
ostream & operator <<(ostream &out, Point &P)
{
out<<"("<<P.x<<","<<P.y<<")"<<endl;
return out;
}
double Point::distance(Point P)
{
return sqrt((P.x-x)*(P.x-x)+(P.y-y)*(P.y-y));
}
//Circle.h
#include "Point.h"
class Circle
{
private:
Point M;//quy dao cua diem M quay quanh tam I
Point I;//tam
public:
Circle():M(0,0),I(0,0){};
friend istream & operator >>(istream &, Circle &);
friend ostream & operator <<(ostream &, Circle &);
double perimeter();
double area();
};
//Circle.cpp
#include "Circle.h"
istream & operator >>(istream &in, Circle &C)
{
cout<<"Nhap toa do tam I: "<<endl;
in>>C.I;
cout<<"Nhap toa do M: "<<endl;
in>>C.M;
return in;
}
ostream & operator <<(ostream &out, Circle &C)
{
cout<<"Toa do tam I = ";
out<<C.I;
cout<<"Toan do diem M = ";
out<<C.M;
return out;
}
double Circle:erimeter()
{
double R;
R=I.distance(M);
return 2*R*3.14159;
}
double Circle::area()
{
double R;
R=I.distance(M);
return R*R*3.14159;
}
//MainProg.cpp
#include "Circle.h"
#include "Point.h"
#include <conio.h>
void main()
{
Circle C;
double result;
cout<<"Nhap toa do tam va quy dao M cua duong tron"<<endl;
cin>>C;
cout<<C;
result=C.perimeter();
cout<<"Perimeter = "<<result<<endl;
result=C.area();
cout<<"Area = "<<result<<endl;
getch();
}View more random threads:
- cần giúp đỡ 1 bài tập về phép and và or trên bit
- TQuan lý hàng hóa, thao tác tập tin và class
- Tìm lớp lập trình qua mạng
- Xóa một sinh viên có mã là X
- Bài toán cái túi chạy không đúng. Lỗi ở đâu?
- Giúp mình làm bt với
- Quản Lý Sinh Viên Bằng Danh sách liên kết
- bài tập tính max và min đường chéo của hình tứ giác. Xin được giúp đỡ!
- Viết chương trình tính nội suy ayken dạng 2, giúp e với.
- Thủ thuật tráo bài
-
22-09-2014, 12:31 PM #2
Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
theo mình thì bạn nên khai báo thêm hàm toán tử "=" nữa[IMG]images/smilies/biggrin.png[/IMG]
-
22-09-2014, 03:30 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
copy cả cái lỗi đó được ko? Ta chạy chỉ thấy nó báo sqrt chưa được khai báo, chỉ cần thêm #include <cmath> ở Point.h là được.
---góp ý thêm là những hàm nào ko làm thay đổi Point/Circle thì nên thêm const vào phía sau hàm đó. Vd:
double distance(Point);
thì nên viết là
double distance(Point)const;
---khi truyền tham số thì trừ phi tham số là primitive types (char, int, short, float, double, v.v...) thì nên truyền theo tham chiếu (&). Những tham số nào ko bị thay đổi thì nên thêm const.
vd:
double distance(Point)const;
viết lại là
double distance(const Point&)const;
ostream & operator <<(ostream &out, Circle &C);
viết lại là
ostream & operator <<(ostream &out, const Circle &C);
---trong toán tử << của Circle thì sửa cout thành out.
---do toán tử << của ostream trả về ostream nên cout << x trả về cout, cout << x << y << z cũng trả về cout, nên có thể viết tắt ở những chỗ:
out<<"("<<P.x<<","<<P.y<<")"<<endl;
return out;
viết gọn là
return out<<"("<<P.x<<","<<P.y<<")"<<endl;
cout<<"Toa do tam I = ";
out<<C.I;
cout<<"Toan do diem M = ";
out<<C.M;
return out;
viết gọn là
return out<<"Toa do tam I = "<<C.I<<"; Toan do diem M = "<<C.M;
---nếu các phần tử trong 1 class đã có default ctor hết rồi thì khỏi cần viết default ctor cho nó cũng được.
Hoặc nếu có viết thì M(0,0),I(0,0) có thể viết là M(), I()
-
23-09-2014, 03:38 PM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cảm ơn INTP !!
Có một điều nửa, là bài tập này nếu gộp lại viết trên cùng một file.h thì chương trình chạy được, còn khi tách ra 2 file.h( Point.h và Cricle.h) thì lại ko chạy được nguyên nhân là sao z? Xin INTP chỉ với. Xin cảm ơn
-
23-09-2014, 03:50 PM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
sao lại ko chạy được @_@ Copy cái dòng lỗi paste lên đây để xem mới biết...
à có lẽ do lỗi định nghĩa lại lớp Point/Circle. Phải thêm include guards vào Point.h và Circle.h
#ifndef POINT_H
#define POINT_H
//... nội dung của Point.h
#endif
#ifndef CIRCLE_H
#define CIRCLE_H
//... nội dung của Circle.h
#endif
#ifndef <X> tức là nếu chưa định nghĩa (if not define) X thì sẽ chạy tất cả những gì bên dưới. #define <X> - định nghĩa X để lần sau #include "Point.h" thì #ifndef <X> sẽ trả về false, ko chạy những gì bên dưới #ifndef <X> nữa => chỉ include file Point.h 1 lần (Nếu có #if thì phải có #endif). Chọn tên X sao cho khó/không bị trùng. Thông thường lấy tên file viết in hoa...
-
23-09-2014, 06:48 PM #6
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cảm ơn INTP nhiều!!!
Thì ra là lỗi định nghĩa lại lớp.
Một lần nữa xin cảm ơn INTP. Chức bạn sức khỏe
xã hội vững mạnh, nhu cầu mặc đẹp của con người ngày càng cao. ngành công nghiệp thời trang cũng đang vững mạnh chóng vánh. những nhà máy gia công hàng may mặc chẳng thể đóng góp lặng thầm vào sự...
Tìm xưởng may gia công tại TP Hồ...