C++ class ile kütüphane yazmak

Sanırım const olmasıyla alakalı sandınız. Konu sahibi sabit bir şey istediği için const yaptım. Hatta isterseniz onu constexpr yapmaya çalışabilirsiniz. Yapamayacağınızı fark edeceksiniz. Const olmasıyla alakasız. İlk değer .h dosyasında verilebilir. Ama o değer sınıfın ilk nesnesi oluştuğunda atanacaktır. Ondan önce erişilmeye çalışılırsa hata alınır.

Const ile de yapılabilir contexpr ile de yapılabilir problem o değil. Tanımlama aşamasında varsayılan değer vermek bir modern c++ özelliğidir(yanlış hatırlamıyorsam C++11 ile gelmiş olması lazım) Yani tam olarak bir standart sayılmaz. Konu sahibi kodu kendi kullanmak için değil ödev olarak yazdığı için ne kadar ne sınırlanması verildiğini belirtmemiş o yüzden standartlara uygun olarak yazmak istedim.

Düzenleme:
 
Son düzenleme:
Dolusuyla hata var, hangi birisinden başlasam ki.
İlki Visual Studio'yu Türkçe kullanmak. Aldığınız hataları ne siz, ne onu çeviren kişi, ne de benim anladığımı sanmıyorum. Türk herhangi birinin de hepsini güzelce anlayabildiğini sanmıyorum.
Cstring eklemek. Gerçekten onu kullanacağınız bir şey olduğunu da sanmıyorum.
Sınıflarda namespace kullanmamanızı tavsiye ederim. Kimlerin onu include edeceği belli değil. Adam bir anda bildiği bir Namespace'i kullanmaya başlamış olabilir.

Ufak bir şeyler yaptım. Çalışıyor olması lazım. Genel mantığı anlamışsınızdır.
İsterseniz salt okunur bir dosya hazırlayıp oradan da okuyabilirsiniz.

Benim bildiğim öyle değil. Nereden öğrendiniz bu bilgiyi?
Benim yaptığım şekilde yapınca ilk nesne oluştuğunda ilklendirme yapılıyor olması lazım.

Kod:
#pragma once.
#include <iostream>
#include <string>

class Admin {
public:

 Admin();
 Admin(std::string username, int password);

 void show();
 int getAdminPassword();
 std::string getAdminUsername();

private:
 const int ADMIN_PASSWORD = 1234;
 int adminPassword;
 const std::string ADMIN_USERNAME = "admin";
 std::string adminUsername;
};
Kod:
#include "Admin.h"

Admin::Admin() {
}

Admin::Admin(std::string username, int password) :adminUsername{ username }, adminPassword{ password } {
}

void Admin::show() {
 std::cout << "Kullanici adi girin: ";
 std::cin >> adminUsername;

 if (ADMIN_USERNAME == adminUsername) {
 std::cout << "Kullanici adi dogru. Giris basarili." << std::endl;
 }
 else {
 std::cout << "Kullanici adi yanlis. Lutfen tekrar deneyiniz." << std::endl;
 }
}

int Admin::getAdminPassword() {
 return adminPassword;
}

std::string Admin::getAdminUsername() {
 return adminUsername;
}
Kod:
#include <iostream>
#include <algorithm>
#include <string>
#include "Admin.h"

using namespace std;

int main() {
 auto secim{ 0 };

 cout << "ANA MANU" << endl.
 << "1- Admin Girisi" << endl.
 << "2- Uye Girisi" << endl.
 << "3- Cikis" << endl;
 cout << "Seciminizi girin: ";
 cin >> secim;

 switch (secim) {
 case 1:
 cout << "" << endl;
 break;
 case 2:
 cout << "Uye" << endl;
 break;
 case 3:
 cout << "Cikis" << endl;
 break;
 default:
 cout << "Hatali tuslama yaptiniz." << endl;
 break;
 }

 Admin admin("ahmet", 123);

 admin.show();

 return 0;
}

Yan yana iki nokta üst üste ne işe yarıyor tam olarak.
 
Yan yana iki nokta üst üste ne işe yarıyor tam olarak.
Namespace'leri öğrenmeniz veya sorgulamamanız gerek. Yeni öğreniyor gibisiniz. Şimdiye kadar sorgulamadan her seferinde main olan dosyaya using namespace std; yazmış gibisiniz. İşte onu yazmadığınız zaman bunu kullanmanız gerekiyor. Başka namespace'ler ile karışabilir diye class dosyalarında kullanılması tavsiye edilmez. Çok dert ediyorsanız kullanabilirsiniz.
Const ile de yapılabilir contexpr ile de yapılabilir problem o değil.
Constexpr ile yapılamaz. Constexpr derleme zamanında değeri belli olan şeyler içindir. Bunun değeri çalışma zamanında ilk nesne oluştuğunda atanacağı için derleme zamanında verilemez. Bilmediğiniz şeyler konusunda konuşmakta ısrarcı olduğunuz için size laf anlatmakla daha fazla zaman harcamayacağım.
C++ 11'e modern demeniz üzücü. Kaç yıllık şey. Onları benimsememiş kişilere sadece gülüyorum.
Bir şey varsa vardır. Dil sürekli gelişiyor. Takip edin veya emin olmadığınız şey hakkında konuşmayın.
Hayatta başarılar.
 
Namespace'leri öğrenmeniz veya sorgulamamanız gerek. Yeni öğreniyor gibisiniz. Şimdiye kadar sorgulamadan her seferinde main olan dosyaya using namespace std; yazmış gibisiniz. İşte onu yazmadığınız zaman bunu kullanmanız gerekiyor. Başka Namespace'ler ile karışabilir diye class dosyalarında kullanılması tavsiye edilmez. Çok dert ediyorsanız kullanabilirsiniz.

Constexpr ile yapılamaz. Constexpr derleme zamanında değeri belli olan şeyler içindir. Bunun değeri çalışma zamanında ilk nesne oluştuğunda atanacağı için derleme zamanında verilemez. Bilmediğiniz şeyler konusunda konuşmakta ısrarcı olduğunuz için size laf anlatmakla daha fazla zaman harcamayacağım.
C++ 11'e modern demeniz üzücü. Kaç yıllık şey. Onları benimsememiş kişilere sadece gülüyorum.
Bir şey varsa vardır. Dil sürekli gelişiyor. Takip edin veya emin olmadığınız şey hakkında konuşmayın.
Hayatta başarılar.

Evet yeni öğreniyorum hep using namespace std kullanmıştım.
 
Constexpr ile yapılamaz. Constexpr derleme zamanında değeri belli olan şeyler içindir. Bunun değeri çalışma zamanında ilk nesne oluştuğunda atanacağı için derleme zamanında verilemez. Bilmediğiniz şeyler konusunda konuşmakta ısrarcı olduğunuz için size laf anlatmakla daha fazla zaman harcamayacağım.
C++ 11'e modern demeniz üzücü. Kaç yıllık şey. Onları benimsememiş kişilere sadece gülüyorum.
Bir şey varsa vardır. Dil sürekli gelişiyor. Takip edin veya emin olmadığınız şey hakkında konuşmayın.
Hayatta başarılar.

Yapmış olduğunuz const tanımlaması da önceden belirli değerler(admin ve 1234) olduğu için ayrı değerler constexpr olarak da tanımlanabilir, neye göre yapılamaz dediğinizi anlamadım açıkcası. Compiler Explorer - C++ (x86-64 gcc 11.1) değerin ne zaman atanacağının önemi yok değer önceden belli ve aynı scope içindeyse iki türlüde kullanılabilir.

Asıl modern C++ tanımını benim yapmış olduğumu sanmanız üzücü C++11 ve üzeri(14, 17, 20) sürümleri modern C++ olarak kabul edilir. isocpp/CppCoreGuidelines

The aim of the guidelines is to help people to use modern C++ effectively. by "modern C++" we mean C++11, C++14, and C++17. ın other words, what would you like your code to look like in 5 years' time, given that you can start Now? In 10 years' time?

Senin ne dediğinin ya da benim ne düşündüğümün önemi yok yani, geliştiren adamlar bu şekilde tanımlıyor. Benimseme meseleside hala 20 yıl önceki halini standart koyan ya da hala 2021 de bile C öğreten ya da Dev-C++ gibi sözde IDE'ler kullandırtan hocalara/kişilere eleştiri yapın bana değil. Önceki mesaj da belirttiğim gibi kullanım standartlarını kendi belirlemiyor ödev olduğu için veren kişi belirliyor ve ne olduğunu belirtmediğine göre standart olan C++03'e göre işlem yapılır, imkan var diye ben burada gelip daha tam anlamıyla destek bile almamış C++20'e göre mi yazayım, bu mu mantık?
 

Yeni konular

Geri
Yukarı