Header va cpp fayllarini ishlatganda strukturani qanday aniqlash mumkin?

Men kodni yozdim, unda asosiy tashqari boshqa tuzilmani belgilab qo'ydim. Bu asosan shunday edi:

class Queue
{
public:
    void enqueue (int x);
    void dequeue ();
    void print ();
};

struct queueNode
{
    int data;
    queueNode * next;
    queueNode * prev;
};

queueNode * head;
queueNode * tail;
queueNode * n;

//class functions that use head, tail, and n


int main ()
{

//functions that use head, tail, and n

return 0;
}

Bu juda ham ko'p, ammo bu juda ham nozik versiyasi, lekin siz rasmni olasiz.

Muammo shundaki, endi uni turli xil fayllarga bo'lak-bo'lak qilsam, boshimni, quyruqni yoki n-ni qaerga qo'yish kerakligini tushunolmayman.

Agar men ularni sarlavha ostiga qo'ysam, ular braxet emas, chunki ular faqat sarlavha faylining quyruq uchi bo'lishi mumkin emas.

Agar ularni amalga oshirish fayliga qo'ygan bo'lsam, ular asosiy ma'lumotlardan foydalana olmaydi. Va men buni amalga oshirish faylini yoqtirolmayman, chunki u qayta nomlangan.

Va agar ularni asosiy qilib qo'yadigan bo'lsam, ular amalga oshirish faylida mavjud emas.

Bularni qaerga qo'yishim kerak? Biror konvensiya bormi?

0
javob uchun rahmat. Agar ular navbatda bo'lsalar, ota-onalar hech narsani ko'ra olmaydilar ... EDIT: Muqaddas F, men achchiq bo'laman. Sizning sharhlaringiz men uchun asosiy echimdan foydalanadigan va amalga oshirish faylidagi funktsiyalarga qo'yiladigan yechimni ko'rdi. rahmat!
qo'shib qo'ydi muallif FKAjasmine, manba
javob uchun rahmat. Agar ular navbatda bo'lsalar, ota-onalar hech narsani ko'ra olmaydilar ... EDIT: Muqaddas F, men achchiq bo'laman. Sizning sharhlaringiz men uchun asosiy echimdan foydalanadigan va amalga oshirish faylidagi funktsiyalarga qo'yiladigan yechimni ko'rdi. rahmat!
qo'shib qo'ydi muallif FKAjasmine, manba
Queue ichida emasmi?
qo'shib qo'ydi muallif tkausl, manba
Queue ichida emasmi?
qo'shib qo'ydi muallif tkausl, manba

6 javoblar

Men shunday qilardim:

The declaration of the class and the structure -> to a header (or separate headers). The node variables are to be put to a source file (c or cpp) to be not accessed from outside directly; if other source files need access to them - you can provide get/set functions for this purpose. Also to the source file should come the implementation of the class' methods if they are not inline.

1
qo'shib qo'ydi
Ha, ha, men ahmoqman. Buni qanday hal qilish kerak, shuncha rahmat!
qo'shib qo'ydi muallif FKAjasmine, manba

Men shunday qilardim:

The declaration of the class and the structure -> to a header (or separate headers). The node variables are to be put to a source file (c or cpp) to be not accessed from outside directly; if other source files need access to them - you can provide get/set functions for this purpose. Also to the source file should come the implementation of the class' methods if they are not inline.

1
qo'shib qo'ydi
Ha, ha, men ahmoqman. Buni qanday hal qilish kerak, shuncha rahmat!
qo'shib qo'ydi muallif FKAjasmine, manba

Queue sinfidagi tugunli sinf, quyruqning quyruq, bosh va n a'zolarini yaratish.

class Queue {
public:
  struct Node {
    int data_;
    Node * next_;
    Node * prev_;
    Node (const Node& n) : next_ (n.next_), prev_ (n.prev_){}
  };
  void enqueue (int x);
  void dequeue ();
  void print ();
  Node* n() const {return n_;} //read only
  Node*& n() {return n_;}      //read and write
private :
  Node * head_;
  Node * tail_;
  Node * n_;
};

Asosiy sifatida a'zo quyruq va navbatga aniq kirish mumkin va navbatdagi hamma narsa bitta faylda bo'ladi:

int main() {
  //functions that use head, tail, and n
  Queue queue;
  Queue::Node *node (queue.n ());
  return 0;
}
1
qo'shib qo'ydi

Queue sinfidagi tugunli sinf, quyruqning quyruq, bosh va n a'zolarini yaratish.

class Queue {
public:
  struct Node {
    int data_;
    Node * next_;
    Node * prev_;
    Node (const Node& n) : next_ (n.next_), prev_ (n.prev_){}
  };
  void enqueue (int x);
  void dequeue ();
  void print ();
  Node* n() const {return n_;} //read only
  Node*& n() {return n_;}      //read and write
private :
  Node * head_;
  Node * tail_;
  Node * n_;
};

Asosiy sifatida a'zo quyruq va navbatga aniq kirish mumkin va navbatdagi hamma narsa bitta faylda bo'ladi:

int main() {
  //functions that use head, tail, and n
  Queue queue;
  Queue::Node *node (queue.n ());
  return 0;
}
1
qo'shib qo'ydi

Agar siz istasangiz

queueNode * head;
queueNode * tail;
queueNode * n;

Sizning asosiy funktsiyangiz orqali siz odatda ularni xohlagan joyga qo'shish uchun bir nom fayliga qo'yishingiz mumkin (masalan, sarlavhali fayldagi faylni nusxa ko'chirishingiz mumkin) yoki ularni main.cpp faylida asosiy funktsiyangizdan oldin e'lon qiling. oddiy.

Yuqorida aytib o'tilgan nomlar faylida (sinf/tuzilish va a'zolarning kontseptsiyalari) ta'riflarni qo'yish odatda yaxshi bo'lsa-da, nima degani kabi. va manba fayllaridagi funktsiyalarni chiqaring.

Odatda, o'zingiz o'zgaruvchan/ob'ektni e'lon qilganda uni kerakli joyning yonida bajarasiz, agar kerak bo'lsa, bir nechta joy kerak bo'lmasa, bu holda uni faqat sarlavha ostiga qo'yib, soqchilarni o'z ichiga oladi. Misol:

main.cpp

#include "queue.h"
#pragma once

queueNode * head;
queueNode * tail;
queueNode * n;

//class functions that use head, tail, and n


int main ()
{

//functions that use head, tail, and n

return 0;
}

queue.h

class Queue
{
public:
    void enqueue (int x);
    void dequeue ();
    void print ();
};

struct queueNode
{
    int data;
    queueNode * next;
    queueNode * prev;
};

queue.cpp

#include "queue.h"
//queue and other methods should go here.

faqat mafkurasiz bir nechta manba fayllarni kompilyatsiya qilsangiz ularni bir-biriga ulashingiz kerakligini eslang.

0
qo'shib qo'ydi
Rostini aytadigan bo'lsak, Sanktning javobiga o'xshab, men nima uchun bu salbiy ekanini bilmayman. Agar siz global miqyosdagi ifloslanishni oldini olishni istasangiz va ularni bir oz ommaga qoldirishni xohlasangiz, uning usuli eng yaxshi g'oya bo'lishi mumkin.
qo'shib qo'ydi muallif user3440251, manba

Agar siz istasangiz

queueNode * head;
queueNode * tail;
queueNode * n;

Sizning asosiy funktsiyangiz orqali siz odatda ularni xohlagan joyga qo'shish uchun bir nom fayliga qo'yishingiz mumkin (masalan, sarlavhali fayldagi faylni nusxa ko'chirishingiz mumkin) yoki ularni main.cpp faylida asosiy funktsiyangizdan oldin e'lon qiling. oddiy.

Yuqorida aytib o'tilgan nomlar faylida (sinf/tuzilish va a'zolarning kontseptsiyalari) ta'riflarni qo'yish odatda yaxshi bo'lsa-da, nima degani kabi. va manba fayllaridagi funktsiyalarni chiqaring.

Odatda, o'zingiz o'zgaruvchan/ob'ektni e'lon qilganda uni kerakli joyning yonida bajarasiz, agar kerak bo'lsa, bir nechta joy kerak bo'lmasa, bu holda uni faqat sarlavha ostiga qo'yib, soqchilarni o'z ichiga oladi. Misol:

main.cpp

#include "queue.h"
#pragma once

queueNode * head;
queueNode * tail;
queueNode * n;

//class functions that use head, tail, and n


int main ()
{

//functions that use head, tail, and n

return 0;
}

queue.h

class Queue
{
public:
    void enqueue (int x);
    void dequeue ();
    void print ();
};

struct queueNode
{
    int data;
    queueNode * next;
    queueNode * prev;
};

queue.cpp

#include "queue.h"
//queue and other methods should go here.

faqat mafkurasiz bir nechta manba fayllarni kompilyatsiya qilsangiz ularni bir-biriga ulashingiz kerakligini eslang.

0
qo'shib qo'ydi
Rostini aytadigan bo'lsak, Sanktning javobiga o'xshab, men nima uchun bu salbiy ekanini bilmayman. Agar siz global miqyosdagi ifloslanishni oldini olishni istasangiz va ularni bir oz ommaga qoldirishni xohlasangiz, uning usuli eng yaxshi g'oya bo'lishi mumkin.
qo'shib qo'ydi muallif user3440251, manba