массивы — расширение типа данных

Есть ли способ расширить тип данных в 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());

Это должно как-то распечатать.

2

Решение

Самое близкое, что вы можете получить, это использовать перегрузку операторов, например,

#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,

1

Другие решения

Нет пути к этому в C ++. На мой взгляд, наиболее близким к этому было бы создание класса, который бы работал как встроенный тип, но обеспечивал бы дополнительную функциональность. Никогда нельзя заставить их работать на 100% как встроенные типы, хотя «суррогатные» типы не всегда идеальны.

2

Нет, JavaScript основан на прототипах для объектов. Эта концепция не распространяется на C ++. Это такие разные языки, что я даже не могу показать вам контрпример к вашему вопросу.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector