მთავარი  |    ფორუმი  |    FAQ  |    წესები  |    რეკლამა ჩვენთან  |    კონტაქტი  |    რუქა






ადგილმდებარეობა  მთავარი » სტატიები » პროგრამირება
რამეში ვერ უგებენ C და C++ ერთმანეთს? თუ . . . 2

სანამ საქმეს შევუდგებოდეთ, მეტი გარკვეულობისათვის მინდა გავაკეთო ერთი “ლირიკული” გადახვევა;

ჩემი სატატიები არ არის განკუთვნილი რომელიმე კონკრეტული პროგრამირების ენის სწავლებისათვის და შესაბამისად მე არ ვირჩევ თემებს რაღაც გარკვეული შენაარსობრივი თანმიმდევრობით. ენის სწავლებაზე უამრავი ლიტერატურაა, დაწყებული  რუსთაველის მეტროდან, “არკის” გავლით, ვიდრე ფილარმონიამდე და დამთავრებული ინტერნეტით.

ასე რომ მე არ გავაკეთებ უკვე დაღეჭილის გადაღეჭ-გადმოღეჭვას.

ეს სტატიები შეიძლება გამოადგეს, როგორც დამწყებ და საშუალო დონის პროგრამისტებს ასევე პროფესიონალებსაც. (ჩემი ემოციურის სისტემის სტატუსი – “მოკრძალებით” J).

მაშ, გამოვრთოთ ახლა “ლირიკის” რეჟიმი, ჩავრთოთ მეცნიერული რეჟიმი და მაშასადამე შევუდგეთ საქმეს.

CompInfo-ს მე-16 ნომერში განვიხილავდით C და C++-ს შორის ზოგიერთ პრინციპულ განსხვავებას. გავაგრძელოთ იგივე თემის შემდგომი ქვესაკითხები.

მაშ. . .

1. C++-ში ცვლადი შეიძლება აღიწეროს ბლოკის ნებისმიერ ადგილას.

2. C++-ში არის ახალი ტიპი bool.

დავიწყოთ პირველით. ჯერ ავიღოთ კოდი C++-თვის:

#include "iostream"
using namespace std;

 

void main()
{
  
int x;
   x=23;
  
int y;
   y=25;

 

   cout << x << endl << y << endl;

 

   return;
}

ეს პროგრამა კომპილირებისას რა თქმა უნდა არანაირ შეცდომას არ იძლევა. ახლა იგივე გავაკეთოთ C-სათვისაც:

#include "stdio.h"

 

void main()
{
    
int x;
     x=23;
    
int y;
     y=25;   
}

ნუ, ბატონი ქუიქ-სი არ დააყოვნებს და მაშინვე შეგვატყობინებს შეცდომის შესახებ, რომ  int y;-ის წინ “;” არასწორად წერიაო. მთლად ზუსტად მაინც ვერ ხვდება თუ რა შეურაწყოფა მივაყენეთ და რატომ, მაგრამ ღირსება კი ყოფნის.

ცხადია მისი თვალსაზრისით სწორი იქნებოდა კოდი:

#include "stdio.h"

 

void main()
{
    
int x;
    
int y;    

 

     x=23;    
     y=25;   
}

აი კიდევ ერთი მაგალითი C++-ში:

#include "iostream"
using namespace std;

 

void main()
{
      
int x;

 

       for(int y=1;y<=10;y++) cout << y << endl;

 

       return;
}

    ჩანს, რომ ცვლადი აღწერილია ციკლში. აქ არის რამდენიმე საინტერესო მომენტი: ჯერ ერთი რომ ეს y ცვლადი შეიძლება გამოვიყენოთ ციკლის გარეთაც და მეორე, რომ თუ გარეთ იგივე ცვლადს ახლიდან აღვწერთ ამით არაფერი არ დაშავდება (შეამოწმეთ).

საქმე იმაშია, რომ ციკლში ცვლადის აღწერა იგივეა რაც ცვლადის აღწერა ქვებლოკში:

#include "iostream"
using namespace std;

 

void main()
{
     
int x;
      {
          
int y;  //ქვებლოკი
      }

 

      int y;

 

      return;
}

    - ეს კოდი კომპილირებისას შეცდომას არ იძლევა. მაგრამ თუ მოვხსნით ქვებლოკის ფრჩხილებს ცხადია კომპილატორი მას აღიქვავს როგორც ცვლადის ორჯერ აღწერა და ამის გამო ძალიან გაბრაზდება.

    ეს უკანასკნელი სიტუაცია უკავშირდება ე.წ. ცვლადის მხედველობის არის მცნებას და ამიტომ აქ ჩვენ მასზე ბევრს არ ვილაპარაკებთ, რადგან ეს მცნებები (მხედველობის არე, სიცოცხლის ხანგრძლივობა. . . ) მოდის ჯერ კიდევ C - დან.

    კი, მაგრამ, ვითომ რა ხეირი თუ კი C++-მა ასე გამიმარტივა ცხოვრება რომ შემიძლია ცვლადი აღვწერო პროგრამის ნებისმიერ ადგილას?

    განვიხილოთ ერთი მაგალითი და ვნახავთ რა ხეირიც.

#include "iostream"
using namespace std;

 

class MyClass
{
private:
     
long double M[500];
public:
     
void set_m(int _i, long double _m)
      {

 

             M[_i]=_m;

 

      }
};

 

void main()
{
     
int x;

 

      cin >> x;

 

       if(x>5)
       {
         MyClass ob;
         ob.set_m(1,x);
       }
      
return;
}

    ალბათ ყველაფერი გასაგებია. თუ კი x<5  ან x=5  მაშინ კლასის ობიექტი არ აღიწერება და შესაბამისად არც მეხსიერება გამოიყოფა ტყუილად. ეს კი იმას ნიშნავს რომ თუ ჩემი კლასი შეიცავს ე.წ. დინამიკურ მეხსიერებას და იგი არის “განუსაზღვრელი”  ზომის მაშინ ასეთი სისტემა მე ბევრ უპირატესობებს მაძლევს პროგრამის მუშაობის დროს.

იმედია პრაქტიკაში უკეთ დარწმუნდებით.

ახლა განვიხილოთ მეორე “გაუგებრობა”: “C++-ში არის ახალი ტიპი bool.”

C-ში ასეთი რამ რომ დაწერო:

#include "stdio.h"

 

void main()
{
 
bool b;

 

  b = true;
}

- კომპილატორი ჩვეული სისწრაფით გადაირევა. თუმცა ჩემის აზრით, თვით C++-ის კომილატორებისათვისაც კი, რომლებშიც პროგრამები კეთდება მხოლოდ DOS-ის რეჟიმისათვის, ეს ახალი ტიპი მაინც და მაინც დიდ საჭიროებას არ წარმოადგენს, ხოლო რაც შეეხება მაგალითად MFC-ს თავისი  WinAPI-ანად, იქ true და false-ის წერა, ბოლოს და ბოლოს ეთიკის საკითხია, საჭიროებას რომ თავი დავანებოთ.

ცნობიასათვის:  bool ტიპის ცვლადი იღებს ორ მნიშვნელობას true და false და რიცხობრივად არსებობს ასეთი შესაბამისობა false==0  და  true != 0;

აი, სულ ეს იყო!

რეზიუმე

C და C++ კიდევ ბევრ რამეში ვერ უგებენ ერთმანეთს!

 

ავტორი: გიორგი ბაწაშვილი (G3B)

  
ინფორმაცია


თემატური სტატიები




ბმულები შესაბამის თემაზე


სტატიის შეფასება
ეს გვერდი უკვე შეაფასეს!

შეფასება: 1
შეფასება: 5



გამოხმაურება

საინტერესოა ნამდვილად დამწყებებისთვის მარა რეალურად OOP-ში ესეთი ნიუანსები ზალიან მარტივად წყდება
03-08-2011, 21:37:07 | malucius

აღდგენილია სტატიის საწყისი ვარიანტი
07-02-2010, 11:05:22 | G3B


კომენტარის დატოვება
თქვენ არ შეგიძლიათ კომენტარების დატოვება.