在学习c++总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
04-c++day01
C++程序模板
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 using namespace std; 4 5 6 7 int main() 8 { 9 test(); 10 11 system("pause"); 12 return EXIT_SUCCESS; 13 }
一、C++概述
1、C++简介
“c++”中的++来自于c语言中的递增运算符++,该运算符将变量加1。c++起初也叫”c with clsss”.通过名称表明,c++是对C的扩展,因此c++是c语言的超集,这意味着任何有效的c程序都是有效的c++程序。c++程序可以使用已有的c程序库。
库是编程模块的集合,可以在程序中调用它们。库对很多常见的编程问题提供了可靠的解决方法,因此可以节省程序员大量的时间和工作量。
c++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。
c语言和c++语言的关系:
c++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。
C语言和C++并不是对立的竞争关系:
1)C++是C语言的加强,是一种更好的C语言。
2)C++是以C语言为基础的,并且完全兼容C语言的特性。
c语言和C++语言的学习是可以相互促进。学好C语言,可以为我们将来进一步地学习C++语言打好基础,而C++语言的学习,也会促进我们对于C语言的理解,从而更好地运用C语言。
2、可移植性和标准
c++98——>(修订)c++98/c++2003——>c++11
二、C++初识
1、练习1:hello world
1 #define _CRT_SECURE_NO_WARNINGS
//#include标准输入输出流 in输入 out 输出 2 using namespace std;//使用命名空间std 打开一个叫std房间 3 4 //函数入口地址 5 int main() 6 { 7 //cout标准的输出 8 // << 左移运算符 9 //endl 结束换行 10 cout << "hello world" << endl; 11 12 system("pause");//阻塞功能 13 return EXIT_SUCCESS;//返回正常退出 14 }
问题1:c++头文件为什么没有.h?
在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c++得用法改变了,c++头文件没有扩展名。但是有些c语言的头文件被转换为c++的头文件,这些文件被重新命名,丢掉了扩展名.h(使之成为c++风格头文件),并在文件名称前面加上前缀c(表明来自c语言)。例如c++版本的math.h为cmath.
由于C使用不同的扩展名来表示不同文件类型,因此用一些特殊的扩展名(如hpp或hxx)表示c++的头文件也是可以的,ANSI/IOS标准委员会也认为是可以的,但是关键问题是用哪个比较好,最后一致同意不适用任何扩展名。
问题2:using namespace std 是什么?
namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
问题3:cout 、endl 是什么?
cout是c++中的标准输出流,endl是输出换行并刷新缓冲区。
2、面向对象
面向对象编程(Object-Oriented Programming)简称 OOP 技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用 OOP 技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。
在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:
对象 = 算法 + 数据结构
程序 = 对象 + 对象 + ……
3、面向对象三大特性
》封装
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。
》 继承
继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。
继承的作用:避免公用代码的重复开发,减少代码和数据冗余。
》多态
多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
练习2:双冒号作用域运算符
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 using namespace std; 4 5 int atk = 200; 6 void test01() 7 { 8 int atk = 100; 9 10 cout << "攻击力为:" << atk << endl; 11 //双冒号 作用域运算符 ::全局作用域 12 cout << "全局攻击力为:" << ::atk << endl; 13 } 14 15 16 int main() 17 { 18 test01(); 19 20 system("pause"); 21 return EXIT_SUCCESS; 22 }
练习3:namespace命名空间
namespace的使用.cpp
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 #include"game1.h" 4 #include"game2.h" 5 6 using namespace std; 7 8 //namespace命名空间主要用途 用来解决命名冲突的问题 9 void test01() 10 { 11 LOL::goAtk(); 12 KingGlory::goAtk(); 13 } 14 15 //1.命名空间下 可以放函数、变量、结构体、类 16 namespace A 17 { 18 void func(); 19 int m_A = 20; 20 struct Person 21 { 22 }; 23 class Animal{}; 24 namespace B 25 { 26 int m_A = 10; 27 } 28 } 29 //2.命名空间必须定义在全局作用域下 30 //3.命名空间可以嵌套命名空间 31 32 void test02() 33 { 34 cout << "作用域B下的m_A为:" << A::B::m_A << endl; 35 } 36 37 //4.命名空间是开放的,可以随时在原先的命名空间添加内容 38 namespace A //此A命名空间会和上面的命名空间A进行合并 39 { 40 int m_B = 1000; 41 } 42 43 void test03() 44 { 45 cout << "A::下的m_A为:" << A::m_A << "m_B为:" << A::m_B << endl; 46 } 47 48 //5.无名/匿名命名空间 49 namespace 50 { 51 int m_C = 0; 52 int m_D = 0; 53 } 54 //当写了无名命名空间,相当于写了static int m_C,static int m_D(即只能在当前文件中使用) 55 56 //6.命名空间可以起别名 57 namespace veryLongName 58 { 59 int m_A = 0; 60 } 61 void test04() 62 { 63 //起别名 64 namespace veryShortName = veryLongName; 65 cout << veryLongName::m_A << endl; 66 cout << veryShortName::m_A << endl; 67 } 68 69 70 int main() 71 { 72 test01(); 73 74 system("pause"); 75 return EXIT_SUCCESS; 76 }
game1.h
1 #include2 using namespace std; 3 4 namespace LOL 5 { 6 void goAtk(); 7 }
game1.c
1 #include "game1.h" 2 3 void LOL::goAtk() 4 { 5 cout << "LOL攻击实现" << endl; 6 }
game2.h
1 #include2 using namespace std; 3 4 namespace KingGlory 5 { 6 void goAtk(); 7 }
game2.c
1 #include"game2.h" 2 3 void KingGlory::goAtk() 4 { 5 cout << "王者农药攻击实现" << endl; 6 }
练习4:using声明和using编译指令
using声明和using编译指令.cpp
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 using namespace std; 4 5 namespace KingGlory 6 { 7 int sunwukongId = 10; 8 } 9 10 void test01() 11 { 12 int sunwukongId = 20; 13 14 //using声明 15 //写了using声明后,下面这行代码说明以后看到的sunwukongId是用KingGlory下的 16 //但是 编译器又有就近原则 17 //二义性 18 //using KingGlory::sunwukongId; 19 20 cout << sunwukongId << endl; 21 } 22 23 //using编译指令 24 namespace LOL 25 { 26 int sunwukongId = 30; 27 } 28 29 30 void test02() 31 { 32 //int sunwukongId = 20; 33 //using编译指令 34 using namespace KingGlory;//打开王者荣耀房间 35 using namespace LOL;//打开LOL房间 36 //如果打开多个房间,也要避免二义性问题 37 cout << sunwukongId << endl; 38 } 39 40 int main() 41 { 42 test01(); 43 44 system("pause"); 45 return EXIT_SUCCESS; 46 }
三、C++对C扩展
1、C++对C语言增强
C++对C语言的增强C语言.c
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 #include 4 #include 5 6 //1.全局变量检测增强 7 int a; 8 int a = 10; 9 10 //2.函数检测增强 11 int getRectS(w, h) 12 { 13 } 14 void test02() 15 { 16 getRectS(10, 10, 10); 17 } 18 19 //3.类型转换检测增强 20 void test03() 21 { 22 char* p = malloc(sizeof(64));//malloc返回值是void* 23 } 24 25 //4.struct增强 26 struct Person 27 { 28 int m_Age; 29 //void plusAge();//C语言中struct不可以加函数 30 }; 31 void test04() 32 { 33 struct Person p1;//C语言使用时候必须加入struct关键字 34 } 35 36 //5.bool类型增强 C语言中没有bool类型 37 //bool flag; 38 39 //6.三目运算符增强 40 void test06() 41 { 42 int a = 10; 43 int b = 20; 44 45 printf("ret = %d\n", a > b ? a : b); 46 47 //a > b ? a : b = 100;//相当于20=100,C语言返回的是值 48 49 //C语言中想模仿C++写 50 *(a > b ? &a : &b) = 100; 51 printf("a = %d,b = %d\n", a, b); 52 } 53
//7.const增强
const int m_A = 10;//全局只读区,受到保护,不可以修改
void test07()
{
//m_A = 100;
const int m_B = 20;//伪常量
//m_B = 100;
int* p = (int*)&m_B;
*p = 200;
printf("*p = %d, m_B = %d\n", *p, m_B);
//int arr[m_B];不可以初始化数组
} 54 55 int main(){ 56 57 test02(); 58 59 system("pause"); 60 return EXIT_SUCCESS; 61 }
C++对C语言的增强C++语言.cpp
1 #define _CRT_SECURE_NO_WARNINGS 2 #include3 using namespace std; 4 5 //1.全局变量检测增强 6 //int a; 7 int a = 10; 8 9 //2.函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强 10 int getRectS(int w, int h) 11 { 12 return w*h; 13 } 14 15 void test02() 16 { 17 getRectS(10, 10); 18 } 19 20 //3.类型转换检测增强 21 void test03() 22 { 23 char* p = (char*)malloc(sizeof(64));//malloc返回值是void* 24 } 25 26 //4.struct增强 27 struct Person 28 { 29 int m_Age; 30 void plusAge(){m_Age++;};//C++中struct可以加函数 31 }; 32 void test04() 33 { 34 Person p1;//C++使用时候可以不加struct关键字 35 p1.m_Age = 10; 36 p1.plusAge(); 37 cout << p1.m_Age << endl; 38 } 39 40 41 //5.bool类型增强 C++中有bool类型 42 bool flag = true;//只有真或假 true代表真(非0) false代表假(0) 43 void test05() 44 { 45 cout << sizeof(bool) << endl;//1个字节 46 47 flag = 100; 48 //bool类型 非0转为1,0就转为0 49 cout << flag << endl; 50 } 51 52 //6.三目运算符增强 53 void test06() 54 { 55 int a = 10; 56 int b = 20; 57 58 cout << "ret = " << (a > b ? a : b) << endl; 59 60 (a > b ? a : b) = 100;//b = 100,C++中返回的是变量 61 62 cout << "a = " << a << endl; 63 cout << "b = " << b << endl; 64 } 65
//7.const增强
const int m_A = 10;//全局只读区,受到保护,不可以修改
void test07()
{
//m_A = 100;
const int m_B = 20;//真正常量
//m_B = 100;
int* p = (int*)&m_B;
*p = 200;
cout << "*p = " << *p << endl;
cout << "m_B = " << m_B << endl;
int arr[m_B];//可以初始化数组
} 66 67 int main() 68 { 69 test02(); 70 71 system("pause"); 72 return EXIT_SUCCESS; 73 }
解释(7.const增强)
在学习c++总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。