سؤال

لقد استخدمتها في جافا ولم يكن لديك الكثير من القضايا، لكنني لا أمسك بها جيدا في C ++. المهمة هي:

Write a class named Car that has the following member variables:

    year. An int that holds the car's model year.
    make. A string that holds the make of the car.
    speed. An int that holds the car's current speed.

In addition, the class should have the following member functions.

    Constructor.  The constructor should accept the car's year and make 
        as arguments and assign these values to the object's year and 
        make member variables.  The constructor should initialize the 
        speed member variable to 0.

    Accessors.  Appropriate accessor functions should be created to allow 
        values to be retrieved from an object's year, make, and speed 
        member variables.

    accelerate.  The accelerate function should add 5 to the speed member 
        variable each time it is called.

    brake.  The brake function should subtract 5 from the speed member 
        variable each time it is called.

Demonstrate the class in a program that creates a Car object, and then 
    calls the accelerate function five times.  After each call to the 
    accelerate function, get the current speed of the car and display 
    it.  Then, call the brake function five times.  After each call to 
    the brake function, get the current speed of the car and display it.

حتى الآن هذا ما لدي ولكن أنا معقول أنا مخطئ تماما. إذا كان لدى أي شخص أي نصيحة سأقدرها حقا، شكرا!

#include<iostream>
#include<string>

using namespace std;

class Car
{
    public:
        int year;
        string make;
        int speed;
    Car()
    {
        setYear(newYear);
        setMake(newMake);
        setSpeed(0);
    }

    void setYear(int newYear)
    {
        year = newYear;
    }
    void setMake(string newMake)
    {
        make = newMake;
    }
    int getYear()
    {
        return year;
    }
    string getMake()
    {
        return make;
    }
    int accelerate(int speed)
    {
        return (speed+5);
    }
    int brake(int speed)
    {
        return (speed-5);
    }
};

int main()
{
    return 0;
}

ملاحظة: الرئيس الرئيسي قد عودة 0؛ بحتة كحاولة مكان محاولة لفهم شيء كامل "الحصول على وتعيين".

هل كانت مفيدة؟

المحلول

عموما يجب أن تعمل وظائف Get / Set بشكل جيد. بعض التعليقات الأخرى:

  • ال year, make و speed يجب أن تكون المتغيرات خاصة، وإلا فلن تكون هناك حاجة حقا للحصول على وظائف الحصول على / تعيين لها منذ أن يتم تغيير المتغيرات مباشرة.
  • ربما لا ينبغي أن يكون هناك أي وظائف مجموعة على الإطلاق. لا أعتقد أنه من المقصود أن يكون ذلك ممكنا year أو make أو تعيين speed مباشرة.
  • يجب أن يأخذ المنشئ newYear و newMake كما المعلمات.
  • accelerate() و break() يجب تغيير ذلك speed المحفوظة في كائن السيارة، وليس فقط إرجاع قيمة مختلفة عن speed.
  • using namespace std; يمكن استيراد الكثير من الأسماء غير المتوقعة إلى مساحة الاسم العالمية وغالبا ما يكون من الأفضل استخدام أسماء مؤهلة صراحة مثل std::string في حين أن.

نصائح أخرى

بعض المشاكل التي أراها:

أنت تشير إلى المتغيرات في المنشئ لم يتم تمريرها إلى المنشئ (newYear, newMake)

ال accelerate و decelerate الوظائف لا تعدل أي دولة؛ إنهم يضيفون فقط وطرح 5 من السرعة التي مرت - لا أعتقد أنهم من المفترض أن يتصرف بهذه الطريقة. لاحظ أن وصف المشكلة يقول أنها تضيف إلى / طرح من speed متغير الأعضاء.

جميع المتغيرات الأعضاء الخاصة بك عامة. هل تفعل هذا في جافا؟

من المحتمل أنك تريد إجراء المتغيرات الداخلية الخاصة نظرا لأنها يجب تحديثها إلا بواسطة الأساليب داخل الفصل. ثانيا، تحتاج إلى معلمات إلى المنشئ بحيث يمكنك ضبط السنة وجعلها في البداية.

السابق:

public: Car(int newYear, string newMake) {...}

class Car
{
private:
        int year;
        string make;
        int speed;
public:
    Car(int newYear, string newMake)
    {
        setYear(newYear);
        setMake(newMake);
        setSpeed(0);
    }
    ...
}

أنت أيضا لا تقوم بتحديث قيم السرعة على accelerate و brake طرق. يحاول:

return (speed -=5);

أو

return (speed += 5);

ال accelerate() و brake() يجب أن تعمل الوظائف على speed عضو بدلا من مجرد إعادة القيمة المعدلة. هذا يعني تعيين ل speed حسب الاقتضاء.

أيضا، عادة ما يتم إجراء الأعضاء الذين لديهم مسافرين private أو protected بدلا من ترك الجمهور.

يتم استخدام طريقة Getter و Setter لتحقيق تغليف البيانات، بحيث يمكن لأعضاء الفصل فقط الوصول إلى أعضاء البيانات فقط في الفصل.

العديد من التعليقات:

  1. يجب أن تكون المتغيرات الأعضاء نشر, ، ليس عامة نظرا لأنهم يكسرون في مجال التغليف والهزائم بغرض الوصول إليهم باستخدام وظائف Accessor (Getter / Setter).
  2. أسماء وظيفتك ومعلمات الوظائف أغميض أسماء المتغيرات الأعضاء الخاصة بك، والتي تؤدي إلى بعض الارتباك. كما هو الحال في جافا حيث تحتاج إلى استخدام this.x لتمييز متغير العضو "X" من المعلمة "X"، وبالمثل، ستحتاج إلى استخدامها this->x. وبعد ومع ذلك، يمكن تجنب ذلك إذا كنت تعطي دائما المتغيرات الأعضاء لديك نوعا من البادئة. الاتفاقيتان الشائعة هي متغيرات الأعضاء البادئة مع الشرطة السطرية (مثل اسم المتغير العضو الخاص بك _speed واستخدام speed كاسم معلمة) أو لاستخدام "M" (بالنسبة إلى "عضو") متبوعا بسطر آخر.
  3. أي وظيفة لا تعدل البيانات - أي وظائف "Getter" - جميع وظائف "Getter" - مع الكلمة الرئيسية مقدار ثابت, ، بحيث يمكن الوصول إلى هذه البيانات من const Car أو const Car&. وبعد على سبيل المثال، استخدم int getSpeed()const بدلا من int getSpeed() أن تعلن أنه ثابت.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top