C/C++教程

C++学习记录(一)结构体,字符串,内联函数,const,函数参数,函数重载

本文主要是介绍C++学习记录(一)结构体,字符串,内联函数,const,函数参数,函数重载,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
终于又更新博客了,这次更新的内容是关于C++学习记录的。
  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 }

 

这篇关于C++学习记录(一)结构体,字符串,内联函数,const,函数参数,函数重载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!