Это может быть переносное решение. Соответствует стандартам.
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#include<sstream>
std::string ssystem (const char *command) {
char tmpname [L_tmpnam];
std::tmpnam ( tmpname );
std::string scommand = command;
std::string cmd = scommand + " >> " + tmpname;
std::system(cmd.c_str());
std::ifstream file(tmpname, std::ios::in );
std::string result;
if (file) {
while (!file.eof()) result.push_back(file.get());
file.close();
}
remove(tmpname);
return result;
}
//for cygwin
int main(int argc, char *argv[])
{
std::string bash = "FILETWO=/cygdrive/c/*\nfor f in $FILETWO\ndo\necho \"$f\"\ndone ";
std::string in;
std::string s = ssystem(bash.c_str());
std::istringstream iss(s);
std::string line;
while ( std::getline(iss, line) )
{
std::cout << "LINE-> " + line + " length: " << line.length() << std::endl;
}
std::cin >> in;
return 0;
}
Вы должны изменить Shape(double w, double h)
на Shape(w, h)
. Фактически вы вызываете базовый конструктор.
Кроме того, вам не нужно устанавливать width
и height
в тело конструктора производного класса:
Rectangle(double w, double h) : Shape(w, h)
{}
. Это связано с тем, что в списке инициализаторов Shape(w, h)
вызывается конструктор базового класса (shape
), который будет устанавливать эти значения для вас.
Когда производный объект создается, Выполнено:
Shape
выделена . В вашем примере подобъект Shape
инициализируется Shape(double w = 0, double h = 0, double r = 0)
. В этом процессе все элементы базовой части (width
, height
, radius
) инициализируются базовым конструктором. После этого выполняется тело производного конструктора, но вам ничего не нужно менять, поскольку все они заботятся о базовом конструкторе.
Почти. Вместо того, чтобы обновлять параметры здесь:
Rectangle(double w, double h) : Shape(double w, double h)
Вы должны просто «передать их» (чтобы дать неточную формулировку):
Rectangle(double w, double h) : Shape(w, h)
{ }