C++ cout komutunu değişkenli bir biçimde bir değişkene tanımlama

Evet tam olarak istediğim şey bu denilebilir.
Hayır, aradığınız o değil. Açıkçası başta güzel anlattığınızı düşünmüyorum. Hala tam olarak anlamadım ne anlattığınızı. Verilen önerileri de araştırdığınızı sanmıyorum.
Aradığınız şey operatör aşırı yükleme veya operator overloading denen şey. Elinizde sınıf varsa veya elinizdeki şey sınıfa dönüştürülebiliyorsa bu. Değilse de stringstream daha mantıklı bence. to_string amele işi oluyor gibi.
 
@Vavien. verilen önerileri araştırdım en azından attığınız kaynaklara baktım fakat verilen örnek kodlarla yapmak istediğim şeyi bağdaştıramadım. Örnek bir kod yazacağım ve yapmak istediğimi en iyi anlatan şey bu olacak diyebilirim. Mevcut kodları paylaşmama sebebim ise ödevin hala devam etmesi.

[CODE lang="cpp" title="Örnek"]# include <iostream>
# include <string>
int main ()
{
double a, b, c;
a = 1;
b = 2;
c = a + b;
std::cout << a << "+" << b << "=" << c << std::endl;
}
[/CODE]
[a << "+" << b << "="] ifadesini direkt tek bir değişken yapmak istiyorum, o değişkene de "sonuc" diyelim. Ben [std::cout << sonuc << c << endl;] yazdığımda üstteki örnek kodun içerisinde vermiş olduğum kodla aynı şeyi yazdırmak istiyorum. Verdiğiniz kaynağa okudum fakat ya ben anlayamadım ya da size benim anlattığım şeyi farklı düşündünüz. Eğer ben yanlış anladıysam lütfen kusura bakmayın. Aşırı yüklemeyi 4 gün önce gösterdikleri için pratiğim yok bundan dolayı da anlamamış olabilirim. Eğer hala bunun aşırı yükleme olduğuna eminseniz lütfen tekrar belirtin ve ben de araştırma yapıp aşırı yüklemeyi anlayıp düzelteyim.
 
Evet tam olarak istediğim şey bu denilebilir. Teşekkürler ve evet Qt kullanıyorum :)
[CODE lang="cpp" title="Qt"]#include <QCoreApplication>
#include <QString>
#include <QDebug>
#include <iostream>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

double aa = 66.89154;

QString s = QString::number(aa, 'g', 6);
qDebug() << s;
QString str = QString("%1").arg(aa);
qDebug() << str;

// veya std::string
// std::string s = QString::number(aa).toStdString();
// std::cout << s << std::endl;
return a.exec();
}
[/CODE]
Referanslar:
QString
QString format

Hayır, aradığınız o değil. Açıkçası başta güzel anlattığınızı düşünmüyorum. Hala tam olarak anlamadım ne anlattığınızı. Verilen önerileri de araştırdığınızı sanmıyorum.
Aradığınız şey operatör aşırı yükleme veya operator overloading denen şey. Elinizde sınıf varsa veya elinizdeki şey sınıfa dönüştürülebiliyorsa bu. Değilse de stringstream daha mantıklı bence. to_string amele işi oluyor gibi.
Amelelikten çok nasıl ele anılanacağı önemli, bir veya iki tip dönüşümü için stringstream kullanmanın anlamı yok. Eğer sürekli veya fazla sayıda dönüşüm yapılsaydı to_string gereksiz olacaktı. Katı kurallar olmadan optimal çözüme ulaşmak gerektiğini düşünüyorum. Operatör aşırı yükleme eğer rahatsız ediyosa .push_back(char) tek tek karakter ekleyebilirsiniz.
Düzenleme: Yazdığınızı yanlış okuduğum için son cümlemi kaldırıyorum. Kusura bakmayın.
 
Son düzenleme:
Kendi complex sayı sınıfını implement etmiyor musunuz? Ediyorsanız overloading kullanın , eğer etmiyorsanız o zaman başka bir complex sayı sınıfımı kullanıyorsunuz?

@Vavien. verilen önerileri araştırdım en azından attığınız kaynaklara baktım fakat verilen örnek kodlarla yapmak istediğim şeyi bağdaştıramadım. Örnek bir kod yazacağım ve yapmak istediğimi en iyi anlatan şey bu olacak diyebilirim. Mevcut kodları paylaşmama sebebim ise ödevin hala devam etmesi.

[CODE lang="cpp" title="Örnek"]# include <iostream>
# include <string>
int main ()
{
double a, b, c;
a = 1;
b = 2;
c = a + b;
std::cout << a << "+" << b << "=" << c << std::endl;
}
[/CODE]
[a << "+" << b << "="] ifadesini direkt tek bir değişken yapmak istiyorum, o değişkene de "sonuc" diyelim. Ben [std::cout << sonuc << c << endl;] yazdığımda üstteki örnek kodun içerisinde vermiş olduğum kodla aynı şeyi yazdırmak istiyorum. Verdiğiniz kaynağa okudum fakat ya ben anlayamadım ya da size benim anlattığım şeyi farklı düşündünüz. Eğer ben yanlış anladıysam lütfen kusura bakmayın. Aşırı yüklemeyi 4 gün önce gösterdikleri için pratiğim yok bundan dolayı da anlamamış olabilirim. Eğer hala bunun aşırı yükleme olduğuna eminseniz lütfen tekrar belirtin ve ben de araştırma yapıp aşırı yüklemeyi anlayıp düzelteyim.
 
[CODE lang="cpp" title="Qt"]#include <QCoreApplication>
#include <QString>
#include <QDebug>
#include <iostream>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

double aa = 66.89154;

QString s = QString::number(aa, 'g', 6);
qDebug() << s;
QString str = QString("%1").arg(aa);
qDebug() << str;

// veya std::string
// std::string s = QString::number(aa).toStdString();
// std::cout << s << std::endl;
return a.exec();
}
[/CODE]
Referanslar:
QString
QString format


Amelelikten çok nasıl ele anılanacağı önemli, bir veya iki tip dönüşümü için stringstream kullanmanın anlamı yok. Eğer sürekli veya fazla sayıda dönüşüm yapılsaydı to_string gereksiz olacaktı. Katı kurallar olmadan optimal çözüme ulaşmak gerektiğini düşünüyorum. Operatör aşırı yükleme eğer rahatsız ediyosa .push_back(char) tek tek karakter ekleyebilirsiniz.
Düzenleme: Yazdığınızı yanlış okuduğum için son cümlemi kaldırıyorum. Kusura bakmayın.
Yanıtınız ve çözümünüz için teşekkürler fakat sadece Qt´ye uygun ve Qt´de kullanılan bir çözüm değil genel bir kod olması gerekiyor kodların. @Collorpus attığınız kaynakta yanlış anlamadıysam bir struct yapısı oluşturup içerisine tanımlamaları yapacağım? Yani şuna benzer şekilde:
C++:
std::ostream& operator<<(std::ostream &strm, const A &a) {
  return strm << "A(" << a.i << ")";
}
 
Yanıtınız ve çözümünüz için teşekkürler fakat sadece Qt´ye uygun ve Qt´de kullanılan bir çözüm değil genel bir kod olması gerekiyor kodların. @Collorpus attığınız kaynakta yanlış anlamadıysam bir struct yapısı oluşturup içerisine tanımlamaları yapacağım? Yani şuna benzer şekilde:
C++:
std::ostream& operator<<(std::ostream &strm, const A &a) {
return strm << "A(" << a.i << ")";
}

Sınıf ya da struct fark etmez ostream sınıfının '<<' oparatörünü gösterdiğin şekilde overload etmen yeterli. A sınıfı yerine ComplexNumber sınıfını koymalı ve dönüş ifadesindeki String'i kendine göre düzenlemelisin. Bundan sonra bir ostream sınıfına '<<' oparatörürünü kullandığında sadece objeyi yazman yeterli olacak (cout consola bağlanmış bir ostream sınıfıdır örneğin ). Şunun gibi:

C++:
ComplexNumber cr("paramtreler");
cout << cr << endl;
//overload fonksiyonunda belirttiğin şekilde yazdırılacak.
 
OO paradigmasini kullan, ComplexNumber.toString() fonksiyonunu cagirdiginda o kendisi string reprezantasyonunu return etsin. Sonrasinda onu print et istersen, istersen baska bir sey yap.

cout yapacagin icin "<<" operatorunu overload etme fikri gundeme gelmis ama aslinda buna gerek yok.
 

Geri
Yukarı