类型转换函数

一、转换函数 Conversion Functions(operators) 在 C++ 中,使用类作为具体类型,对现实世界对象进行抽象。有时,需要隐式地将一种具体类型转换为另一种具体类型或 C++ 内建数据类型。转换函数在这种情况下发挥着重要作用。它类似于类中的运算符重载函数。 转换函数写法:operator typeName(); 转换函数必须是类的成员函数 转换函数不能指定返回值类型 转换函数不能有形参 例如下面的类: class Fraction { public: Fraction(int numerator, int denominator = 1) :m_numerator(numerator), m_denominator(denominator) { } //转换函数 operator double() const { return (double)m_numerator / m_denominator; } private: int m_numerator; //分子 int m_denominator; //分母 }; int main() { Fraction f(8,5); double d = 4 + f; cout << d << endl; return 0; } 输出:...

April 10, 2022 · 3 min · Rick Cui

2022-02-14 杂记

NULL,0,'\0',‘0’ int main() { char arr[] = {0, '\0', '0', 48}; printf("%c\n", arr[0]); printf("%c\n", arr[1]); printf("%c\n", arr[2]); printf("%c\n", arr[3]); printf("---------------\n"); printf("%d\n", arr[0]); printf("%d\n", arr[1]); printf("%d\n", arr[2]); printf("%d\n", arr[3]); return 0; } 输出: 0 0 --------------- 0 0 48 48 UTF-8 向下兼容 ASCII 编码,UTF-8 编码中,一个英文字为一个字节,一个中文一般为三个字节(ASCII、Unicode、UTF-8) 0xxxxxxx:单字节编码形式,这和 ASCII 编码完全一样,因此 UTF-8 是兼容 ASCII 的; 110xxxxx 10xxxxxx:双字节编码形式; 1110xxxx 10xxxxxx 10xxxxxx:三字节编码形式; 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx:四字节编码形式; UTF-8:每字 1 ~ 6 字节 Unicode(UCS-2):每字都是 2 bytes UTF-16:每字 2 ~ 4 字节 UTF-32(UCS-4):每字都是 4 bytes float 单精度,浮点数在内存中是按科学计数法来存储的,小数点后6位能确定表示,float 是由 1 bit 符号位,8 bit 指数位和 23 bit 尾数位组成,精度是由尾数位决定的(2^23 = 8388608)...

February 15, 2022 · 1 min · Rick Cui

递归与递归树

逆序打印字符串 void printReverseString(const char* str){ if(*str == '\0'){ return; } printReverseString(str + 1); printf("%c", *str); } int main() { const char* str = "Hello World"; printReverseString(str); // dlroW olleH return 0; } 逆序输出链表 struct LinkNode{ int data; struct LinkNode* next; }; void printReverseLinkNode(struct LinkNode* header){ if(header == NULL){ return; } printReverseLinkNode(header->next); printf("%d\n", header->data); } int main() { struct LinkNode* header = malloc(sizeof(struct LinkNode)); struct LinkNode* node1 = malloc(sizeof(struct LinkNode)); node1->data = 10; node1->next = NULL; struct LinkNode* node2 = malloc(sizeof(struct LinkNode)); node2->data = 20; node2->next = NULL; struct LinkNode* node3 = malloc(sizeof(struct LinkNode)); node3->data = 30; node3->next = NULL; header->next = node1; node1->next = node2; node2->next = node3; printReverseLinkNode(header->next); return 0; } 递归实现给出一个数 8793,依次打印千位数 8、百位数 7、十位数 9、个位数 3...

February 7, 2022 · 2 min · Rick Cui

常用的宏定义

int main() { printf("%s\n", __FILE__); // main.c printf("%d\n", __LINE__); // 14 printf("%s\n", __DATE__); // Feb 7 2022 printf("%s\n", __TIME__); // 01:59:37 return 0; } // func1.h #ifdef __cplusplus extern "C"{ #endif void func1(); #ifdef __cplusplus } #endif // main.h extern "C"{ include "func1.h" } extern "C"{ extern void func1(); } int main() { func1(); return 0; }

February 7, 2022 · 1 min · Rick Cui

char* 数组

void printArr(const char ** p, int len){ for(int i = 0; i < len; ++i){ cout << p[i] << endl; } } void sortSelect(const char ** p, int len){ for(int i = 0; i < len - 1; ++i){ int max = i; for(int j = i + 1; j < len; ++j){ if(p[j] > p[max]){ max = j; } } // 交换 if(i != max){ const char* tmp = p[i]; p[i] = p[max]; p[max] = tmp; } } } int main() { const char* arr[] = {"aa", "bb", "cc", "dd", "ee"}; int len = sizeof(arr) / sizeof(char*); cout << len << endl; printArr(arr, len); sortSelect(arr, len); cout << "----------------" << endl; printArr(arr, len); return 0; } 输出:...

February 3, 2022 · 1 min · Rick Cui