Есть ли способ расширить тип данных в C ++, как вы можете в JavaScript?
Я думаю, это примерно так:
char data[]="hello there";
char& capitalize(char&)
{
//Capitalize the first letter. I know that there
//is another way such as a for loop and subtract
//whatever to change the keycode but I specifically
//don't want to do it that way. I want there
//to be a method like appearance.
}
printf("%s", data.capitalize());
Это должно как-то распечатать.
Самое близкое, что вы можете получить, это использовать перегрузку операторов, например,
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
std::string operator!(const std::string& in) {
std::string out = in;
std::transform(out.begin(), out.end(), out.begin(), (int (*)(int)) std::toupper);
return out;
}
int main() {
std::string str = "hello";
std::cout << !str << std::endl;
return 0;
}
Альтернативные подходы включают создание класса с operator std::string
перегружен и конструктор для его инициализации с помощью std::string
,
Нет пути к этому в C ++. На мой взгляд, наиболее близким к этому было бы создание класса, который бы работал как встроенный тип, но обеспечивал бы дополнительную функциональность. Никогда нельзя заставить их работать на 100% как встроенные типы, хотя «суррогатные» типы не всегда идеальны.
Нет, JavaScript основан на прототипах для объектов. Эта концепция не распространяется на C ++. Это такие разные языки, что я даже не могу показать вам контрпример к вашему вопросу.