🚀 C# ile Programlamaya Giriş: Kodlamaya İlk Adımını At, Kendi Projelerini Geliştirmeye Başla!
00ANASAYFA 01YAZILAR 02EĞİTİM 03ELEKTRİK_ENERJİ 04OTOMOTİV_MÜHENDİSLİĞİ 05ARAÇLAR 06LAB 07SÖZLÜK 08ETİKETLER ♡OKUMA LİSTEM ⌕ARA
TRENG

Sınıflar ve nesneler

Veriyi ve davranışı tek yapıda topla: class, private/public, yapıcı (constructor), const metot ve struct.

Şimdiye kadar veriler ve fonksiyonlar ayrıydı. Bir direncin değerini bir double'da, akım hesabını ayrı bir fonksiyonda tutuyorduk. Büyük programlarda bu dağınıklık hata kaynağıdır. Sınıf, ilgili veriyi (üyeler) ve o veriyle çalışan fonksiyonları (metotlar) tek bir yapıda toplar. Sınıftan üretilen somut örneğe nesne denir.

İlk sınıfımız: Direnc

#include <iomanip>
#include <iostream>

class Direnc {
public:
    // Yapici: nesne olusturulurken calisir
    Direnc(double ohm, double tolerans = 5.0)
        : ohm_(ohm), tolerans_(tolerans) {}

    double deger() const { return ohm_; }

    double akim(double volt) const { return volt / ohm_; }

    double guc(double volt) const {
        double i = akim(volt);
        return volt * i;
    }

    void yazdir() const {
        std::cout << ohm_ << " ohm (+-%" << tolerans_ << ")\n";
    }

private:
    double ohm_;
    double tolerans_;
};

struct Olcum {
    int dakika;
    double sicaklik;
};

int main() {
    Direnc r1(220);
    r1.yazdir();

    std::cout << std::fixed << std::setprecision(4);
    std::cout << "I = " << r1.akim(5.0) << " A\n";
    std::cout << "P = " << r1.guc(5.0) << " W\n";

    Olcum o{10, 23.5};
    std::cout << "t=" << o.dakika << " dk, " << o.sicaklik << " C\n";
    return 0;
}
220 ohm (+-%5)
I = 0.0227 A
P = 0.1136 W
t=10 dk, 23.5000 C

Parçalar

public ve private

public bölümü dışarıya açık arayüzdür; private bölümüne yalnızca sınıfın kendi metotları erişir. r1.ohm_ = -5; yazarsan derleyici izin vermez. Bu kuralın adı kapsüllemedir: dışarıdan değeri değiştirmek isteyenler, senin kontrol ettiğin metotlardan geçmek zorundadır. Böylece bir direncin değeri hiçbir zaman saçma bir sayıya dönüşmez. Alan adlarının sonuna _ koymak, üye değişkenleri yerel değişkenlerden ayırmanın yaygın bir yoludur.

Yapıcı (constructor)

Sınıfla aynı adı taşıyan, dönüş tipi olmayan metottur. Nesne oluşurken otomatik çalışır ve üyelere ilk değerlerini verir. İki nokta üstüne yazılan ohm_(ohm), tolerans_(tolerans) kısmı üye başlatma listesidir ve ilk değer vermenin doğru yoludur. Yapıcıya da varsayılan argüman verebilirsin: Direnc r1(220); toleransı otomatik 5 alır.

const metotlar

Parantezden sonra gelen const, "bu metot nesneyi değiştirmez" demektir. deger(), akim(), guc() böyledir. Sabit nesneler ya da const referanslar üzerinden yalnızca const metotlar çağrılabilir; bu yüzden değiştirmeyen her metodu const işaretle.

struct

struct, varsayılan erişimi public olan bir sınıftır. Davranışı olmayan, sadece veri taşıyan basit yapılar için (Olcum gibi) uygundur. Süslü parantezle ilk değer verilebilir: Olcum o{10, 23.5};.

Başlık ve kaynak dosyası

Gerçek projelerde sınıf bildirimi direnc.h, metot gövdeleri direnc.cpp içine yazılır:

// direnc.h
#pragma once

class Direnc {
public:
    explicit Direnc(double ohm);
    double akim(double volt) const;
private:
    double ohm_;
};

// direnc.cpp
#include "direnc.h"

Direnc::Direnc(double ohm) : ohm_(ohm) {}

double Direnc::akim(double volt) const {
    return volt / ohm_;
}

İki dosyayı birlikte derlemek için: g++ -std=c++17 main.cpp direnc.cpp -o program. #pragma once başlığın aynı dosyada iki kez eklenmesini önler. explicit, tek parametreli yapıcının yanlışlıkla otomatik dönüşüme neden olmasını engeller.

Kural: üye değişkenleri private yap, dışarıya sadece gereken metotları aç. İleride iç yapıyı değiştirmek istediğinde, dışarıdan kullananların kodu bozulmaz.

Direnç değeri sıfır ya da negatif gelirse akim() saçma sonuç verir. Gerçek kodda yapıcı bu durumu kontrol etmeli ve (C++'ta genellikle) bir istisna fırlatmalı ya da geçerli bir değere sabitlemelidir. Doğrulama sınıfın sorumluluğudur.

Kendin dene

  1. Direnc sınıfına tolerans() metodunu ekle.
  2. Bir Kondansator sınıfı yaz (kapasite, nominal gerilim). enerji() metodu 0.5 * C * V * V formülünü hesaplasın.
  3. İki Direnc nesnesinin seri toplamını döndüren bir serbest fonksiyon yaz.
  4. Sınıfı başlık ve kaynak dosyası olarak ikiye böl ve birlikte derle.

// Mini sınav

Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.

1. Sınıfın private bölümündeki üyelere kimler erişebilir?
2. Metot parametre listesinden sonra yazılan const ne anlama gelir?
3. struct ile class arasındaki temel varsayılan fark nedir?

Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.

İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.