c++基础学习笔记——04-c++day01

在学习c++总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

04-c++day01

 

C++程序模板

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<iostream>
 3 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<iostream>标准输入输出流 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 #include<iostream>
 3 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 #include<iostream>
 3 #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 #include<iostream>
2 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 #include<iostream>
2 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 #include<iostream>
 3 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 #include<stdio.h>
 3 #include<string.h>
 4 #include<stdlib.h>
 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 #include<iostream>
 3 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,转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值