الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل يمكن كتابة class وحفظه في ملف لاستعماله بشكل متكرر؟

بدأه my oracle في 5 سبتمبر 2012 · 8 رد · 716 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إن من استخدامات الـ Class هو إنشاء كائن و الاستفادة منه و من خصائصه في بشكل عام . على سبيل المثال الـ stack ( الكائن البرمجي المستخدم في هياكل البيانات ) فعند عمل class بإسم stack و هنالك دالة بإسم push داخل الكود public فإني يمكن الوصول إليها من خلال إلان متغير بإسم mystack و من نوع stack و يكون استخدامها كالآتي

mystack.push(x)

سؤالي هو , إن صياغة البرنامج السابق يكون بالبدأ من بداية البرنامج و ننشيء الـ class مرورا بالدالة main (كي استخدم الـ class داخلها ) , و لكن كيف اذا اردت استخدام الـ class من غير الاعلان عنه مرة أخرى ( على فرض وجوده ككائن مستقل ) ؟

#2

مرحبا بك أخي الكريم ..

ماذا تقصد بـ :

اقتباس
من غير الاعلان عنه مرة أخرى ( على فرض وجوده ككائن مستقل ) ؟

أفترض أنك تقصد أنك تريد استعمال

mystack.push(x)

بدون أن تضطر إلى ذكر اسم الكائن ...

بحيث يشكل الكائن وحدة وحيدة يمكنك التعامل مع توابعها ومتحلاتها بدون ذكر اسم الكائن ...

فهل فهمي للسؤال صحيح ؟

1
#3

نعم , و اقصدن ان شفرة الـ class و الذي بإسم mystack موجود في ملف مستقل لكن هل هذا الملف فيه الدالة main ؟

علماً إني اريد عمل class بشكل عام و لا اريد استخدامه في لحظة عمله ( و هذه هي الفائدة الاساسية من الـ class و الذي هو كائن برمجي )

#4
my oracle كتب:

نعم , و اقصدن ان شفرة الـ class و الذي بإسم mystack موجود في ملف مستقل لكن هل هذا الملف فيه الدالة main ؟

لا

اقتباس
علماً إني اريد عمل class بشكل عام و لا اريد استخدامه في لحظة عمله ( و هذه هي الفائدة الاساسية من الـ class و الذي هو كائن برمجي )

عمل فئة بشكل عام يسمي تعريف فئة قد تكون cars, house , windows وتحتوي على الاقل على ملف الكود وملف التعريف ...

عمل كائن منها الفئة الاساسية يسمي الاعلان عن الكائن س من الفئة cars او house ...

تم تعديل هذه المشاركة بواسطة محمد عودة في 5 سبتمبر 2012 في 22:13

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#5

نعم بالطبع يمكنك ذلك ....

قم بكتابة جسم الـ class بشكل كامل كما تريد ...

ثم احفظه في ملف بلاحقة .h

وفي بداية برنامجك فقط اكتب #include مثل ما تفعل مع الكاتب العادية ...

وبذلك ستحصل على ما تريد بالضبط ...

انتظرني دقيقتين حتى أكتب لك المثال ...

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 5 سبتمبر 2012 في 22:33

#6

بس آني متاكد مما أقول , كيف ؟

عمل class بإسم mystack و فيه دوال من نوع public و التي منها push , طيب ؟ طيب, فإني اريد استخدم هذا الـ class في برامج مختلفة فما عليّ فعله حفظ ملف الـ class و الذي يحوي mystack بإمتداد ليس cpp , و عندما اريد استدعائه في وقت ما كل ما علي فعله ذكر العبارة التالية

#include "mystack"

و عندها استخدم الدوال و المتغيرات الموجودة داخل ذلك الـ class من غير اعادة تعريفه كاملاً , لأني قد صنعت class بخصائصه و مهامه التي اريد و حفظته و لن اعيد كتابته مرة اخرة سوى راس الملف و استيراد ما هو لازم و هذه هي الفائدة الكبرى من OOP .

و سؤالي كيف يتم حفظ ملف الـ class مستقلاً ؟

عفواً اخينا مصطفى كتبنا المشاركات معاً فقد اجبتني قبل ان اسئل و تركت مشاركتي للفائدة .

#7

هذا هو المثال أرجو أن يكون فيه مرادك بالضبط
For You.rar
 

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 28 نوفمبر 2013 في 14:23 — السبب: التعديل بعد إخفاء الأخطاء

#8

في هذا الجزء :

mystack.push(x)

mystack ليس بـclass وليس بمتغير بل يسمى "كائن" object.

أعتقد أن ماتريده أنك تريد إنشاء class وتريد إعادة إستخدامة خارج الدالة الرئيسية. قُم بإنشاء ثلاث ملفات class.h وضع فيه تعريف الـclass :

/**
 * @file class.h
 **/

#ifndef __CLASS_H__
#define __CLASS_H__

class Class {
    int number;
public:
    Class(int number);
    void say_something(void);
};

#endif

وضعت ifndef __CLASS_H__ كي نتجنب الخطأ الذي قد يحدث إذا أردجنا class.h في أكثر من ملف, فقد يعطي المصرف خطأ بسبب إعادة تعريف Class أكثر من مرة.

الآن أنشيء ملف آخر وسمه class.cpp وضع به جميع الوظائف التي تريدها, الدالة إذا كانت تابعة لـclass فتسمى وظيفة. في حالتنا لدينا وظيفة البناء ووظيفة إسمها say_something :

/**
 * @file class.cpp
 **/

#include <iostream>
#include "class.h"
using namespace std;

Class::Class(int number)
{
    this->number = number;
}

void Class::say_something(void)
{
    cout << "number = " << this->number << endl;
}

الآن قم بعمل ملف البرنامج الرئيسي وسمه مثلاً main.cpp :

/**
 * @file main.cpp
 **/

#include "class.h"

int main(int argc, char **argv)
{

    Class object = 1;

    object.say_something();

    return 0;
}

ويمكنك تصريف البرنامج إذا كنت تستخدم gcc هكذا :

> g++ main.cpp class.cpp

أو هكذا إذا كنت تستخدم msvc :

> cl /EHsc main.cpp class.cpp

إذا أردت إعادة إستخدام class في أي برنامج لاحق قم فقط بإدارج الملف الرأسي class.h وصرف البرنامج الرئيسي مع class.cpp.

#9

شكراً جزيلا للأخ مصطفى و Mr.B و هذا هو اهم شيء في البرمجة كائنية التوجه , إلا وهو استخدام الشفرات البرمجية من خلال حفظها و إستخدامها لمجرد ذكر اسمها . علما إن الكثيييييييييييييييييييييير من كتب ++c تتناول موضوع OOP و لكن ليس هذه الفقرة التي تناولنا الحديث عنها و هي الاهم و إلا اصبح مفهوم الـ class لا شيء اذا كنا نعيد كتابته في كل برنامج ( يصبح دالة لا اكثر و لا اقل ) .

الف شكر و وفقكم الله.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…