1.C到C++

一.函数

1.函数传参过程:从右到左依次传递,即是一个入栈的过程

验证:

 1 void print(int a,int b,int c);
 2 
 3 int _tmain(int argc, _TCHAR* argv[])
 4 {
 5     int n = 0;
 6 
 7     print(n++,n++,n++);
 8     while(1);
 9     return 0;
10 }
11 
12 void print(int a,int b,int c)
13 {
14     printf("%d,%d,%d",a,b,c);
15 }

2.函数缺省参数

  1) 顺序:从右到左依次赋值

  2) 补充:

    2-1 只用在声明函数时给默认值,实现函数时不用给,否则会导致"默认值重写"的错误

    2-2 给默认值时一定是从右往左依次赋值,中间不能跳过,或最右边的参数没有默认值,否则编译都不会通过

验证:

1 //正确示例
2 void print(int a,int b,int c=0);
3 void print(int a,int b=0,int c=0);
4 void print(int a=0,int b=0,int c=0);
5 
6 //错误示例
7 void print(int a=0,int b,int c);
8 void print(int a,int b=0,int c);
9 void print(int a=0,int b=0,int c);
10 void print(int a=0,int b,int c=0);

3.函数的重载

  3-1 重载方式

    1)  参数个数不同

    2)  参数类型不同

    3)  参数顺序不同

验证:

1 //原函数
2 void print(double a,int b,int c);
3 
4 //重载函数
5 void print(double a,int b);    //个数不同
6 void print(int a,int b,int c);    //类型不同
7 void print(int a,double b,int c);    //顺序不同

 

  3-2 函数的重载与函数缺省参数一起使用时,要注意二义性问题

    1) 二义性:简单来说,就是同一个词语有两种或多种意思

    2)补充:

      如下代码,在主函数中调用print()函数时,只传递两个参数,函数1与函数2都能匹配到该调用,此时编译器就蒙蔽了,不知道该去调用哪个函数,就出现 了二义性问题。

      函数1与函数2这样去声明与实现,编译器是允许的(编译和运行),但是在调用时才会出问题,所以在重载函数时一定要注意二义性问题

验证:

 1 void print(int a,int b,int c=0);
 2 void print(int a,int b);
 3 
 4 int _tmain(int argc, _TCHAR* argv[])
 5 {
 6     int n = 0;
 7 
 8     print(n++,n++);
 9     while(1);
10     return 0;
11 }

 

二.VS编程框架(Microsoft Visual Studio)

注:项目使用的是win32控制台应用程序

1.框架(win32控制台应用程序)

  1) "stdafx.h": 预编译头文件,用来引入头文件

    引入头文件方式: #include "这里填写.h文件所在路径" 

  2) "stdafx.cpp": 只是因为预编译头的需要才会有,可以忽略掉,没有什么作用

  3) "targetver.h": 仅仅是为了适应WindowsOS版本(例如Windows7,Windows10等)的需要,不用去关注

2.字符集

  2-1 VS存储字符串有两种方式

    1) 多字节字符集:一个字符用一个字节存储

    2) unicode(宽字节)字符集:一个字符用两个字节存储

    3) 多字节与unicode字符集存储字符的方式

      例如一串字符"abcde",多字节字符集存储的方式是"abcde",unicode字符集存储的方式是"a\0b\0c\0d\0e\0"

    4) 补充:

      一个字节为八个比特,如下图所示,可以表示256个字符,两个字节为16比特,可以表示256*256 = 65535个字符,之后依次类推,三个字节就可以表示256*256*256个字符

    

      在英语中,用128个符号编码便可以表示所有的字符,所以一开始只有多字节字符集。但是用来表示其他语言,128个符号是不够的,例如我国的文字就有很多,用256个字符表示根本不够用,于是就用两个字节来表示一个字符,但是呢用两个字节也不一定表示所有的汉字,所以在不同的编译器中,unicode字符集可能是用两个字节存储,也可能是用三个字节存储。

      在VS编译器里,如果是多字节字符集,"_TCHAR"类型的定义是"typedef    char    _TCHAR;", 如果是unicode字符集,"_TCHAR"类型的定义是"typedef    wchar_t    _TCHAR;"

3.main函数参数(也叫命令行参数)

  1) argc:命令行字符串个数,系统会自动填充

  2) argv:字符类型的二维数组,或者说是保存字符指针的一维数组,用来存放多个字符串

  3)补充:

    字符集要使用多字节字符集

    在指定路径下打开cmd:先进到想要打开cmd的路径下,例如"D:\DialogTest\Test\Debug",如下图,删除这个路径,然后在里面输入"cmd.exe"即可

    

验证:

 1 #include "stdafx.h"
 2 #include <iostream>
 3 using namespace std;
 4 
 5 
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     for (int i=0;i<argc;i++)
 9     {
10         cout << "argv[" << i  << "]:"<< argv[i] << "\n";
11     }
12     cout << endl;
13 
14     return 0;
15 }

实现效果:

补充:

  命令行运行:第一个值输入当前项目在Debug下生产的.exe文件,后面的值就是输入的参数

  输出结果:从输出结果可以看出,第一个值保存的是程序的路径,后面的值则是输入的参数

  

posted @ 2020-04-15 10:35  打好基础才是第一步  阅读(178)  评论(0)    收藏  举报