1 #include <iostream> 2 #include <cstring> 3 4 //using namespace std; // 这种方式会包含许多不需要的内容 5 using std::cout; // 这种方式就很轻便 6 using std::endl; 7 using std::string; 8 9 // C++手册,https://www.apiref.com/cpp-zh/index.html 10 11 // 结构体的用法,C++中默认是public; 而struct换成class后变为private 12 struct Stu 13 { 14 int age = 27; 15 string name = "Heze"; 16 int height = 171; 17 void action() { cout << " he is writing the code !" << endl; } 18 }; 19 20 bool compair(string str1, string str2) 21 { 22 if(str1 < str2) { cout << str1 << endl; } 23 else{ cout << str2 << endl;} 24 } 25 26 // 内联函数 27 inline void show() 28 { 29 cout << " hello C++ !" << endl; 30 } 31 32 inline int Max(int a, int b) 33 { 34 return a > b ? a : b; 35 } 36 37 // const修饰变量 38 const int c = 30; 39 40 void test() 41 { 42 const int a = 100; 43 int* p = (int*)&a; 44 *p = 200; 45 cout << "a = " << a << endl; // 100 46 cout << "*p = " << *p << endl; // 200 47 48 // 当一个基本变量被const修饰时,C++会在内存中建立一个常量表(只有直接赋值情况), 49 // a中的值被保存到这个常量表中,再次访问a时,就会从常量表中读取这个值。 50 // volatile const int a = 100; 就不会放到常量表中 51 cout << "&(a) = " << &a << endl; 52 cout << "p = " << &p << endl; 53 } 54 55 // 从右往左赋值(因为函数调用时是从左往右赋值) 56 int showdata(int a = 1, int b = 2, int c = 3) 57 { 58 return a+b+c; 59 } 60 61 // 函数重载 62 void func() 63 { 64 cout << "This is the function one" << endl; 65 } 66 67 void func(int a) 68 { 69 cout << "This is the function two" << endl; 70 } 71 72 void func(float a, int b) 73 { 74 cout << "This is the function three" << endl; 75 } 76 77 int main() 78 { 79 // -1- 结构体的用法 80 /* 81 Stu stu; 82 cout << stu.name << endl; 83 cout << stu.age << endl; 84 cout << stu.height <<endl; 85 stu.action(); 86 */ 87 88 // -2- 字符串的用法 89 /* 90 string str1 = "hello"; 91 cout << str1.length() << endl; // 获取字符串长度,为5 92 cout << str1.size() << endl; 93 94 const char* p = str1.c_str(); // 转换成c类型的字符,长度变为6 95 //while(*p != '\0'){ cout << *(p++) << endl; } 96 cout << strlen(str1.c_str()) << endl; // strlen计算字符串长度时,为'\0'时返回 97 98 string str2 = "C++"; 99 if (str1 < str2) { cout << str1 << endl; } // 比较哪一个字符串小 100 else { cout << str2 <<endl;} 101 102 string str3 = "C++"; // 比较字符串是否相等 103 cout << (str3 == str2) << endl; 104 105 if(compair(str1, str3)) { cout << "str1 small" << endl; } 106 else { cout << "str3 small" << endl; } 107 108 string str4 = str1 + str2; // 字符串相加 109 cout << str4 << endl; 110 111 string str5 = str2.append(str3); // 字符串追加 112 cout << str5 << endl; 113 */ 114 115 // -3- 内联函数(尽量简短,调运频次高时使用) 116 /* 117 show(); 118 int a = 10; 119 int b = 11; 120 cout << Max(a,b) << endl; 121 cout << Max(a,++b) << endl; 122 */ 123 124 // -4- const修饰符 125 /* 进程加载之后:4G空间 126 静态区:代买段,只读数据段(被const修饰的全局变量,字符串,.data,.bss段); 127 程序编译链接时已经被加载了;如有const修饰的变量,这时已经分配内存了。 128 动态区:堆,栈,内核(kernel) 129 堆:手动申请,手动释放,malloc,calloc,relloc开辟空间,free(pointer) 130 栈:随用随释放,指出这个代码块,变量就自动销毁了。 131 */ 132 /* 133 int a = 10; 134 const int b = 20; // 只读变量,不能发生改变 135 static const int d = 40; 136 cout << &a << endl; // 0x62fe1c (栈) 137 cout << &b << endl; // 0x62fe18 (栈) 138 cout << &c << endl; // 0x404004 (静态区) 139 cout << &d << endl; // 0x404008 (静态区) 140 141 //const int* p = &a; // 只读整型的指针,无法通过指针修改变量的值 142 int const* p = &a; 143 cout << *p << endl; // const在*之前,用法都一样 144 145 int e = 50; 146 int* const p1 = &e; // 常指针,无法修改指针,但是可以修改地址中的值 147 *p1 = 51; 148 cout << *p1 << endl; 149 150 test(); 151 */ 152 153 // -5- 函数参数的默认值 154 // 预处理(宏定义),编译,汇编,链接,生成可执行文件 155 /* 156 const int max = 1024; 157 cout << max << endl; 158 159 cout << showdata(1,2) << endl; // 从左往右依次赋值 160 */ 161 162 // -6- 函数重载 163 // 在C++中同一作用域,一组函数名相同,参数列表不同,返回值不受影响,这一组函数就会发生重载 164 // 原理:在C++编译器中,会根据函数名字符数+参数列表中的类型及顺序,自动生成新的函数名并记录在符号表中, 165 // 在函数调用时就会根据这个结果进行调用。又称编译时的多态(静态多态)。 166 func(); 167 func(1); 168 func(3.14,5); 169 170 cout << "Hello World!" << endl; 171 return 0; 172 }