30 Kasım 2017 Perşembe

Final Specifier

Giriş
final bir anahtar kelime değil. Açıklaması şöyle.
override and final are not keywords.Instead they are special identifiers.
That means you can actually declare variables, functions or type-names (type-alias or classes) with those names.
Final Specifier sınıf ve virtual metodlar ile kullanılır.

Sınıf İçin 
Şöyle yapılır.
class Foo
{
  ...
};
class Baz final : public Foo
{
  ...
};
Metod İçin
Açıklaması şöyle. Bir virtual metodun artık override edilemeyeceğini belirtir. C#'taki sealed ile aynı mantıkta çalışır.
If you don't mark the function as virtual and final then the child-class can still implement the function and hide the base-class function.

By making the function virtual and final the child-class can not override or hide the function.
Kısaca şöyle tanımlanabilir.
void foo() final;
Uzun hali ise şöyle yazılır.
virtual void foo() final override;
C#'ta sealed başa yazılır, C++'ta ise sona yazılır.
public sealed override string Method1(){.....}
Örnek
Şöyle yaparız.
struct B {
    virtual void f() const final;   // do not override
    virtual void g();
};
struct D : B {
    void f() const;     // error: D::f attempts to override final B::f
    void g();       // OK
};
Destructor İçin
Örnek
Şöyle yaparız.
class Derived: public Base
{
  ...
  virtual ~Derived() final;
}
Bu durumda Derivide sınıfından kalıtmak mümkün olmaz. Şu kod derlenmez.
class FurtherDerived: public Derived {// not allowed
}

29 Kasım 2017 Çarşamba

__LINE__ Macrosu

Giriş
Açıklaması şöyle.
__LINE__ : expands to the source file line number, an integer constant, can be changed by the #line directive
Örnek
Şöyle yaparız.
#include <iostream>
using namespace std;

int main() 
{
    cout<<__LINE__<<endl;
    return 0;
}
Çıktı olarak şunu alırız.
6

27 Kasım 2017 Pazartesi

std::byte Enum

Giriş
C++17 ile geliyor. Açıklaması şöyle.
Like char and unsigned char, it can be used to access raw memory occupied by other objects (object representation), but unlike those types, it is not a character type and is not an arithmetic type. A byte is only a collection of bits, and only bitwise logic operators are defined for it.
Örnek
Şöyle yaparız
Result decode(std::span<const std::byte> buffer);

17 Kasım 2017 Cuma

std::negate metodu

Giriş
Şu satırı dahil ederiz.
#include <functional> 
-1 ile çarpar.

Örnek
Şöyle yaparız.
std::vector<double> v(255);
std::transform(v.cbegin(),v.cend(),v.begin(),std::negate<double>());

std::round metodu

Giriş
İmzası şöyle.
double round(double);
Açıklaması şöyle.
The round functions round their argument to the nearest integer value in floating-point format, rounding halfway cases away from zero, regardless of the current rounding direction.
C++11 ile geldi.
Eğer sonucun integral olmasını istiyorsak std::lround() kullanırız. std::lrint() metodu da integral bir sayı döner ancak sabit bir kural yerine o anki geçerli yuvarlama kuralını kullanır.
Eğer sonucun floating point olmasını istiyorsak ve sabit kural yerine geçerli yuvarlama yönteminin kullanılmasını istiyorsak std::nearbyint() metodu kullanılır.
Örnek
Şöyle yaparız
double i = std::round(0.9);
C++11'den Önce
Daha önceki C++ sürümlerinde şöyle yaparız.
double input = ...;
double x1 = floor(0.5 + input);

16 Kasım 2017 Perşembe

strftime metodu

Giriş
Şu satırı dahil ederiz.
#include <ctime>
struct tm yapısını formatlayarak string'e çevirir. Bu metodun tersini strptime yapar.

Bu metod genellikle C kodlarında kullanılır. C++ ile kodluyorsak std::put_time() bu metod ile aynı işi yapar.
struct tm (broken time) el etme
struct tm yapısını elde etmek için şöyle yaparız
time_t rawtime;
time (&rawtime);
struct tm * timeinfo = localtime (&rawtime);
Formatlama
%F : ISO 8601 formatında çıktı verir
%Y : yıl
%m : ay
%d : gün
%H : saat
%M : dakika
%S : saniye

Örnek - ISO 8601
ISO 8601 şöyledir.
YYYY-MM-DD
Ay ve gün 0 ile doldurulabilir.  Çıktı olarak şunu alırız.
2017-05-24
Şöyle yaparız.
char buf [99];
strftime(buf,99,"%F",...);
Örnek
Şöyle yaparız.
struct stat attrib;
stat("file.txt", &attrib);
char time[50];
strftime(time, 50, "%Y-%m-%d %H:%M:%S", localtime(&attrib.st_mtime));
printf ("%s\n", time);
Çıktı olarak şunu alırız.
2017-05-08 08:43:42
Örnek
Şöyle yaparız.
time_t rawrime = time(NULL);
struct tm *currTime = localtime(&rawtime); 
char result [50] 
strftime(result, 50, "%Y:%m:%d %H:%M:%S", currTime); //E.g. 2017:11:12 12:30:48