c++第一天笔记(上)

来源:互联网 发布:月度数据分析报告模板 编辑:程序博客网 时间:2024/04/20 14:11


有关c与c++强类型与弱类型区别

void main1(){//C++注重类型,强类型,严格检查类型int *p1=NULL;double *p2=NULL;//p1 = p2; 在C语言中合法,在c++中不合法,c++严格注重类型,C语言类型检查不明确}





cpp独有的变量初始化与iostream实现输入与输出

       //int  a = 5;C语言和c++都可以这样//int a(5); c++独特的初始化方式//double a(3.5);//char *str = "1234";      //char *str("china"); wchar_t *str(L"china");  //宽字符   //cout << str;//这样是输出str变量的地址//wcout << str;宽字符,汉字,棒子文system("pause");

注意:

cout是用来输出char的,如果用cout输出wchar,只会输出地址,要使用wcout输出wchar。

wcout默认是不输出中文的,要想输出中文,要先加入setlocale( LC_ALL, "chs" );这行代码。




c++要求

1.掌握各个知识点,并强化点与点之间的联系,

2.充分理解设计模式,

3.学会综合应用所有的知识点



c++与c头文件的不同

#include<iostream>//加以区分C++的头文件,还是C语言的头文件

在.cpp中用c的代码, c的头文件已经优化加了extern C使用c的调用与链接约定




c++独有的函数重载

:关于代理模式

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数或者类型或者类型顺序)不同,域返回值无关

//参数的个数,参数的类型不同,类型顺序不同, 与返回值无关1.void go(int a)2.void go(double a)//与1类型不同3.void go(double a, int b)//与1,2参数个数不同4.void go(int  a, double b)//与3个数类型而且类型顺序也不同5.错误//*int go(double a)//参数与2相同不合法与返回值无关void go(int a,int b)//与4的b的参数不同上面1,2,3,5是合法的




c++独有函数默认参数

1.明确函数参数从右向左进行处理

2.默认参数必须右边,非默认参数必须左边(默认参数之间不能有非默认参数,)(非默认参数之间不能有默认参数)

3.函数重载冲突的解决办法:1.命名空间 2.用函数指针(注意:函数指针不可以有默认参数,需要精确调用)

#include<iostream>#include<stdio.h>#include<stdio.h>#include<stdlib.h>#include<iostream>//默认参数必须放在右边//默认参数中间不允许出现不默认的void print(int c, int a = 1, int d = 2, int b = 3){std::cout << "void print(int c,int a=1,int d=2,int b=3" << std::endl;std::cout << a << b << c << std::endl;}void print(double c){   std::cout << "void print(double c)" << std::endl;std::cout << c << std::endl;}void main(){   //print(1,2,3);//函数指针没有默认参数,必须全部输入数据//函数重载与函数默认参数冲突,需要你输入的参数类型不一个,个数不一样,顺序不一样不会出现问题,否则一定报错void(*pt1)(int c, int a, int d, int b) = print;//pt1(100, 1, 2, 3);//函数指针调用,没有用默认的print(100);//100是整数,这个会自动对应  void print(int c, int a = 1, int d = 2, int b = 3)print(100.0);//100.0是double类型这个将自动对应 void print(double c)system("pause");}







最后c++独有的命名空间

输出符 <<
 命名空间 std
域控制符 ::

std::cout << "hello world";//输出hello world

namespace应用场合

1.瀑布迭代式软件开始

                                 1.数据重名

2.避免代码冲突       2.函数重名

                                   3.类和结构体重名

关于避免代码冲突的实例

<pre name="code" class="cpp">#include "iostream"  //最近查看iostream时发现这个头文件包含了namespace std;这个命名空间#include"stdlib.h"namespace myspace//自定义的命名空间{int a(15);//定义一个a的变量    void  print() //在其空间定义一个函数{std::cout << "myspace" << std::endl;}}namespace myspaceA //自定义的命名空间{int a(25);  //与上面定义的冲突,不过由于在不同的空间,木有事void  print()//与上面相同{std::cout << "myspaceA" << std::endl;}}::域操作符<pre name="code" class="cpp">void main1(){ int a(5);//std::cout输出, <<输出符,根据类型泛型转换为字符串输出//std::endl;//换行,结束一个输出std::cout << "myspace a=" << myspace::a << std::endl;std::cout << "myspaceA a=" << myspaceA::a << std::endl;//std::cout << " main a=" << a << std::endl;std::cout << "hello world" << std::endl; myspace::print();//调用不同命名空间的函数myspaceA::print();//system("pause");}


另外namespace的例外,(命名空间匿名等价于命名空间默认为全局变量
#include"iostream"//没有命名的命名空间可以直接调用namespace{int a(3);void print(){std::cout << "gogogo";}}void main3(){std::cout << a;print();}



命名空间特性

1.自己可以定义命名空间

2.可以自己拓展命名空间实现迭代

3.命名空间可以实现别名

4.命名空间可以嵌套

5.命名空间默认都是共有的

6.命名空间内部不可以重名

7,命名空间不同,同名变量需要命名空间明确


#include <iostream>namespace runrunrunrun  //命名一个runrunrunrun的命名空间{int a(10);char *str("gogogo");namespace run   //命名空间的嵌套{int a(9);}}namespace runrunrunrun  //命名空间的拓展{int  y(5);//int  a(15);重定义错误}namespace r = runrunrunrun;//给命名空间起一个别名void main132(){std::cout << r::run::a << std::endl;//命名空间可以嵌套std::cout << r::y << std::endl;std::cout << r::a << std::endl;}//using namespace r;void main11(){//std::cout << r::a <<r::str<< std::endl;//std::cout << a << str << std::endl;}




<pre name="code" class="cpp">#include <iostream>namespace runmove{int  y(5);int(*padd)(int, int);//函数指针接口      //private: 命名空间是透明的int  y1(5);class myclass{public://类默认是私有,实现封装int a;};}//下面定义了2个函数,函数类型相同,一般不在命名空间内部定义函数,因为一旦这个空间需要改,那么很麻烦//我们可以在命名空间内部定义一个函数指针实现接口封装,这样就易于维护int add(int a, int b){return a + b;}int addp(int a, int b){std::cout << a << b;return a + b;}struct MyStruct{int b;//结构体默认是透明的private:int a;//是私有};void main1123(){//namespace所有数据,函数,类,对象都是共有MyStruct struct1;//结构体内部默认公有struct1.b;}


7.命名空间不同,同名变量需要命名空间明确与using作用域namespace mydata{int a(6);}namespace yourdata{int a(8);}using namespace mydata;//using必须在命名空间的后面,作用域,如果提前,会报错using namespace yourdata;//using如果变量重名,会出现不明确错误,加上命名空间修饰符void go(){//命名空间如果在块语句内容,作用域是定义开始到块语句结束       //比如在这个块语句内部定义using namespace mydata,那么作用域就只有这个块语句std::cout << mydata::a << std::endl;}//using namespace mydata;//作用域为从代码开始到结束void main(){//std::cout << mydata::a << std::endl;std::cout <<yourdata::a << std::endl;system("pause");}


8;关于::其作用(引用全局命名空间,或者引用特定命名空间(解决特殊的C语言无法引用全局变量(下面定义了2个文件)

extern.c只有一条代码

static  int a = 10;

这是下一个文件代码

#include<iostream>//C++没有.h加以区分C/C++//C/C++头文件  有没有命名空间#include<stdlib.h>//int a = 1;extern  int a;//C++要求严格   //而如果是c语言,无需要再extern 默认是extern,而c++很严格void main(){int a = 3;   std::cout << ::a;//::这样就表示了是输出全局变量a (1)而不是3      //上面这句,c语言无法输出1,因为int a=3屏蔽了int a=1;这全局变量system("pause");}


C++独有的auto自动变量

1.自动获取类型,泛型设计思想

2.c++11新语法实现自动循环一维数组(循环必须是指针常量,数组)

#include<iostream>#include<stdlib.h>//自动变量,自动获取类型,输出,泛型//自动变量,可以实现自动循环一维数组//自动循环的时候对应的必须是常量(如一维数组的数组名,或者2,3,4维的数组名)void mai1111n(){auto num = 10.9;//自动匹配类型auto numA = 10/2.0;//在c中无法获取auto的类型,c++可以std::cout << num <<std::endl<< numA << std::endl;system("pause");}void main(){//int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };double num[10] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };//auto可以实现很多类型体现了泛型编程//自动取出变量赋值给data    auto自动匹配for (auto data : num)   //auto实现通用(泛型c++语法){std::cout << data<<std::endl;  }system("pause");/*double num[2][5] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };//num此时是一个指针常量auto自动循环, begin   end;   必须是一个常量的数组for(auto data:num)这样将打印个数组自动取出变量赋值给auto data auto自动匹配for (auto data : num)   //auto实现通用(泛型c++语法){     此时data是一个行指针std::cout << data << std::endl; //这里将打印地址for (int i = 0; i < 5; i++)//由于是指针,无法确定输出多少个,只好人工控制{             //*(data+i);std::cout << data[i] << std::endl;//输出元素}}*/}


















0 0
原创粉丝点击