大家好,我是小天。这是我在学习C++课程的一些笔记总结,争取能让所有刚入门C++的小伙伴轻松理解。不过还是需要小伙伴有学过其它语言的一点经验,学过C最好。C++笔记系列会不定期更新,如果对你有帮助请留下个赞吧!这会成为小天更文章的动力。
一、面向过程和面向对象的概述
从第一个程序入手
//i input 输入 o output 输出 stream流 输入输出流头文件,类似 //<stdio.h>
#include <iostream>
//std(标准) 使用标准的命名空间,里面有大量可用的工具
using namespace std;
//有且只有一个主函数,可以有多个其他函数
int main()
{
//cout 输出 类似c语言的printf
//endl 类似c语言的换行符
//cout代表输出设备,输出内容由"<<"指向输出设备
cout << "Hello world!" << endl;
//cin代表输入设备,并刷新缓冲区
int num = 0;
cin >> num; //不用取地址符,将将键盘输入的数据
//赋值给num
cout<<"num = "<<num<<endl; //输出num,专注于输出,不用考虑类型
return 0;
}
#输出结果:
Hello world!
100
num = 100
分析:
-
c++引用库的后面不用加后缀.h(加了也可以运行),例如c里面的iostream.h,c++程序也可以用,但要去掉.h,math.h变成cmath。如果是自己写的文件要引用,老老实实双引号加.h后缀,例如"fun.h"。
-
c语言是弱语法 语言(很多警告可以忽略 正常执行),c++是强语法语言(c语言很多警告c++直接报错)。
-
C是面向过程的,其编程思想核心是功能分解,自顶向下,逐层细化(程序=数据结构+算法)
-
面向对象编程,简称OOP技术,将算法与数据结构看作一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用以下等式来定义对象和程序:
对象=算法+数据结构
程序=对象+对象+…
C++的三大特性
封装:把客观的事物抽象成一个类(将数据和方法打包再一起,加以权限的区分,达到保护并安全使用的目的)
继承:继承所表达的是对象类之间的关系,这种关系使得对象可以继承另外一类对象的特征和能力。作用:避免共用代码的重复开发,增加了程序的可重用性,减少了代码和数据的冗余。
多态:多态性可以简单理解为“一个接口,多种方法”,字面意思为多种形态。程序在运行的时候才决定调用的函数,它是面向对象编程领域的核心概念。
二、C++对C的拓展
一、命名空间的定义
-
为解决变量名重名的问题,用namespace
//定义一个名字位A的命名空间(变量、函数) namespace A{ int a = 100; } namespace B{ int a = 200; } void test01() { cout<<"A中a = "<<A::a<<endl; cout<<"B中a = "<<B::a<<endl; } int main() { test01(); return 0; }
结果:
A中a = 100
B中a = 200
注意:
-
命名空间只能在全局范围内定义,不能再函数里面定义
-
命名空间可以嵌套
namespace A{ int a = 100; namespace B{ int a = 200; } } void test02() { cout<<"A中a = "<<A::a<<endl; cout<<"B中a = "<<A::B::a<<endl; }
-
命名空间是开放的,可以随时已有的命名空间中添加新成员
namespace A{ int a = 100; namespace B{ int a = 200; } } namespace A{ int c = 300;//将c添加到已有的命名空间中 } void test03() { cout<<"A中a = "<<A::a<<endl; cout<<"B中a = "<<A::B::a<<endl; cout<<"A中c = "<<A::c<<endl; }
-
命名空间可以存放变量和函数
namespace A{ int a = 100; void func() { cout<<"func遍历a = "<<a<<endl;//自家人不需要A::a } } void test04() { //变量的使用 cout<<"A中a = "<<A::a<<endl; //函数的使用 A::func(); }
-
命名空间中的函数,可以在“命名空间”外 定义
namespace A{ int a = 100; void func(); } void A::func()//成员函数,在外部加记得作用域 { //访问命名空间的数据不用加作用域 cout<<"func遍历a = "<<a<<endl; } void funb()//普通函数 要加作用域 { cout<<"funb遍历a = "<<A::a<<endl; } void test05()//普通函数 { A::func(); funb(); }
-
无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接
namespace{ int a = 100; void func() { cout<<"func遍历a = "<<a<<endl; } } void test06() { cout<<"a = "<<a<<endl; func(); }
-
给命名空间取别名
namespace A{ int a = 100; void func() { cout<<"func遍历a = "<<a<<endl; } } void test() { namespace B = A; cout<<"A::a = "<<B::a<<endl; A::func(); B::func(); } //结果: A::a = 100 func遍历a = 100 func遍历a = 100
更多推荐
C++笔记(新手入门)
发布评论