Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Class Dog

  1. #1
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Mặc định Class Dog

    Mình có đề thế này.

    Lập một class Dog,

    Có 1 static private member variable là counter.

    2 function

    1. Lập giá trị của counter
    2. In giá trị của counter.

    Lập một member variable là weight.

    Define 2 cái constructor. 1 là default, 1 có argument weight.

    Overload operator++, +=

    dog++ //add one pound to weight
    dog+= // add 15 pound to weight


    Code mình thế này

    Code:
    nclude <iostream>
    using namespace std;
    
    
    class Dog
    {
    private:
    		static int counter;
    		double weight;
    public:
    	Dog();
    	Dog(double weight);
    
    	static void Dog::print(int x);
    	Dog& Dog::operator++(int x);
    	Dog& Dog::operator+=(int x);
    	
    
    	void getweight(double x);
    	
    	void printD();
    
    };
    
    int Dog::counter=0;
    
    void Dog::print(int x)
    {
    	counter =x;
    	cout << x;
    }
    
    Dog& Dog::operator++(int x)
    {
    	x=x++;
    	return *this;
    }
    
    Dog& Dog::operator+=(int x)
    {
    	x=x+15;
    	return *this;
    }
    
    void Dog::getweight(double x)
    {
    	x=weight;
    }
    
    void Dog::printD()
    {
    	cout<<"Dog weight"<<weight<<endl;
    }
    
    void main()
    {
    	Dog dg1(70);
    	Dog dg2();
    	dg1.printD();
    	system("pause");
    }

    Bài vốn ko cho main function. Mình cho vào để test nhưng báo lỗi hoài.

    Lỗi

    1>1.obj : error LNK2019: unresolved external symbol "public: __thiscall Dog:og(double)" (??0Dog@@QAE@N@Z) referenced in function _main
    1>C:\Users\Administrator\Desktop\11111\Debug\11111 .exe : fatal error LNK1120: 1 unresolved externals
    1>
    Mấy bạn giúp mình hộ nhé. Sáng mai nộp bài rồi X_X

  2. #2
    Ngày gia nhập
    07 2009
    Bài viết
    48

    Lỗi này là do trong hàm main bạn gọi đến một hàm mới chỉ khai báo mà chưa cài đặt, cụ thể ở đây là hàm tạo đấy bạn
    Một góp ý khác là nếu thuộc tính nào để static thì nên đặt là public chứ không nên để private

  3. #3
    Ngày gia nhập
    01 2013
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi gabk Xem bài viết
    Lỗi này là do trong hàm main bạn gọi đến một hàm mới chỉ khai báo mà chưa cài đặt, cụ thể ở đây là hàm tạo đấy bạn
    Một góp ý khác là nếu thuộc tính nào để static thì nên đặt là public chứ không nên để private
    Tại trong đề yêu cầu counter là private ấy. :(

  4. #4
    Ngày gia nhập
    07 2009
    Bài viết
    48

    Còn một điểm bạn cần chú ý khi lập trình hướng đối tượng nữa là hàm set/get là để thao tác với các thuộc tính private của đối tượng, vì thế hàm get thường là trả về giá trị của thuộc tính đó, còn hàm set là gán giá trị cho thuộc tính đó, làm như bạn không đúng ý nghĩa.
    Mình sửa lại một chút code của bạn như thế này, mình đã test và chạy đúng (đúng yêu cầu của đề bài hơn so với code của bạn)
    Code:
    class Dog{
    private:
    	int weight;
    	static int counter;
    public:
    
    	Dog();
    	Dog(int w);
    	~Dog();
    
    	void setWeight(int w);
    	int getWeight();
    	Dog& operator++(int x);
    	Dog& operator+=(int x);
    	void printInfo();
    };
    
    int Dog::counter = 0;
    
    
    Dog::Dog(int w){
    	weight = w;
    	counter += 1;
    }
    
    Dog::Dog(){
    	weight = 0;
    	counter += 1;
    }
    
    Dog::~Dog(){
    
    }
    
    void Dog::setWeight(int w){
    	weight =w;
    }
    
    int Dog::getWeight(){
    	return (weight);
    }
    
    Dog& Dog::operator ++(int x){
    	weight += 1;
    	return (*this);
    }
    
    Dog& Dog::operator +=(int x){
    	weight += x;
    	return (*this);
    }
    
    void Dog::printInfo(){
    	cout<<"Dog weight: "<<weight<<" (pounds)"<<endl;
    }
    int main() {
    	Dog dog = Dog(10);
    	dog.printInfo();
    	dog = dog++;
    	dog.printInfo();
    	dog+=15;
    	dog.printInfo();
    	return (0);
    }

  5. #5
    Ngày gia nhập
    01 2013
    Bài viết
    1

    À, về cái lỗi kia. Làm làm hồi mới nhớ chưa có đoạn của Constructor.

    Về operator.
    Code:
    Dog& Dog::operator ++(int x){
    	weight += 1;
    	return (*this);
    }
    Mình khai báo x, nhưng ko dùng x. Vậy nó là dummy variable à bạn?

    Còn hàm set/get. Theo bạn nói thì mình hiểu như vầy.

    Giả sử giá trị d1(10) được nhập vào từ main.

    vậy nếu ghi trong main

    d1.setWeight(30);

    khi d1.printInfo(); giá trị ko còn là 10, mà là 30 phải không bạn?

  6. #6
    Ngày gia nhập
    07 2009
    Bài viết
    48

    Mặc định Class Dog

    Đúng rồi, nó chẳng qua là hàm để thay đổi giá trị của thuộc tính thôi, tuy nhiên do thuộc tính là private nên không thể truy xuất từ bên ngoài lớp được, vì lý do đó mới phải sinh ra get/set. Còn cái phần cài đè ++ và += thì nguyên mẫu hàm phải có 1 argument kiểu int, mình cài đè thì phải viết lại nguyên mẫu đã, còn phần +1 chẳng qua là do yêu cầu đề bài là như thế

Các đề tài tương tự

  1. Mã nguồn C Lỗi Lỗi see reference to class template instantiation 'std::list<_Ty>' being khi sử dụng Iterator cho class tự xây dựng
    Gửi bởi Mr_Chan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 10-07-2013, 01:58 AM
  2. Lỗi: error C2440: 'initializing' : cannot convert from 'class xxx *' to 'class xxx *' sửa như thế nào?
    Gửi bởi Nupakachy trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 16-06-2011, 08:54 PM
  3. Cách lấy giá trị biến từ class này sang class khác trong lập trình C#
    Gửi bởi phongk20 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-03-2011, 05:19 PM
  4. Truy cập biến từ class này sang class kia xin giúp
    Gửi bởi baotran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 02-12-2010, 09:20 AM
  5. Tại sao có struct rồi còn sinh ra class. Lợi thế của class là gì?
    Gửi bởi car0ot trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 24-10-2008, 05:26 PM

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

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn