C++面向对象程序设计-基础入门(超详细)

这篇具有很好参考价值的文章主要介绍了C++面向对象程序设计-基础入门(超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、c++概述

二、初识c++

1、第一个c++程序

 2、c++面向对象的三大特性(重要)

三、作用域运算符::

1、使用关键字namespace创建一个命名空间

2、命名空间只能定义在全局

3、 命名空间嵌套

 4、随时将新的成员加入命名空间

5、命名空间中 函数的声明和实现分开 

 6、无名命名空间

 7、命名空间取别名

8、使用using申明命名空间中的某几个成员可用 

出现的问题1: 重复定义

遇到函数重载(函数名相同,形参不同):

9、using声明整个命名空间

 五、类型增强

1、全局变量检测增强

2、c++的函数形参必须有类型

3、c++中函数如果没有参数,必须写void

4、更严格的类型转换

5、结构体类型增强(重要)

 6、c++新增bool类型

7、 三目运算符增

六、c++中的const

七、引用

1、引用的定义

2、引用作为函数的参数 

3、引用作为函数的返回值类型 

4、 常引用

 八、inline内联函数

1、内联函数概述

2、 宏函数和内联函数的区别

3、内联函数条件

4、内联函数的注意事项

九、函数重载

1、函数重载的概念

2、函数重载的条件

十、缺省函数

十一、占位参数


一、c++概述

       C++是对C的扩展,任何有效的c程序都是有效的c++程序,c++程序可以使用已有的c程序库。
C++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++融合了3种不同的编程方式:c语言代表的过程性语言.c++在c语言基础上添加的类代表的面向对象语言.c++模板支持的泛型编程。我们常常将这两门语言统称为“C/C++”。

c编程思想:面向过程

c++编程思想:面向对象泛型编程

面向过程(c): 通过分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步 实现,并调用。

面向对象(c++):面向对象编程,简称oop技术。算法与数据结构被看做是一个整体(对象),程序=对象+对象+对象 +对象        

c++标准:c++98、c++11

二、初识c++

1、第一个c++程序

        #include:预编译指令.引入头文件iostream。 using namespace std:使用标准命名空间,命名空间用关键字namespace来定义。命名空间是.C++的一种机制..用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。 cout<<"hello world"< endl;和printf 功能一样,输出字符串"hello world“。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

      扩展:c++头文件没有扩展名。但是有些c语言的头文件被转换为c++的头文件,这些文件被重新命名丢掉了扩展名.h[使之成为c++风格头文件),并在文件名称前面加上前缀c(表明来自c语言)。例如c++版本的math,h.为 cmath。 

 2、c++面向对象的三大特性(重要)

  • 封装:将相同属性的数据和方法封装在一起,加权限区分,用户只能借助公共方法操作私有数据。
  • 继承:体现在类和类之间的关系,如果A类继承于B类,那么A类直接拥有B类的数据和方法
  • 多态:一个接口(函数),多种功能

三、作用域运算符::

        ::解决局部变量与全局变量的重名问题C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习四、命名空间 

        创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名称,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。c++允许我们对名字的产生和名字的可见性进行控制。我们之前在学习c语言可以通过static关键字来使得名字只得在本编译单元内可见,在c++中我们将通过一种通过命名空间控制对名称的作用域。命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装。

1、使用关键字namespace创建一个命名空间

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

2、命名空间只能定义在全局

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

3、 命名空间嵌套

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 4、随时将新的成员加入命名空间

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

5、命名空间中 函数的声明和实现分开 

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 6、无名命名空间

无命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 7、命名空间取别名

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

8、使用using申明命名空间中的某几个成员可用 

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

出现的问题1: 重复定义

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 若using A::num放在外部,作为全局变量,就不会重复定义。

遇到函数重载(函数名相同,形参不同):

namespace A {
	void fun()
	{
		cout << "A中fun void" << endl;
	}
	void fun(int a)
	{
		cout << "A中fun  int" << endl;
	}
	void fun(int a,int b)
	{
		cout << "A中fun int int" << endl;
	}
}
void test()
{	
	//函数重载,命名空间中所有同名函数都被声明可用
	using A::fun();
	fun();
	fun(10);
	fun(10, 10);
}

9、using声明整个命名空间

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

加作用域解决冲突:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 五、类型增强

1、全局变量检测增强

int a;//没有赋值,当作声明

int a=10;//赋值,当作定义

此代码在c++中编译失败,在c下编译通过。

2、c++的函数形参必须有类型

c语言:允许函数形参无类型(可以传任意参数),c++不允许。

 //i没有写类型,可以是任意类型
int fun1(i)
{
printf("%d\n", i);
return 0;
}
//i没有写类型,可以是任意类型
int fun2(i)
{
printf("%s\n", i);
return 0;
 }

此代码在c++中编译失败,在c下编译通过。

3、c++中函数如果没有参数,必须写void

        在C语言中,int fun()表示返回值为int,接受任意参数的函数,int fun(void)表示返回值为int的无参函数在C++中..int fun(和 int fun(void)具有相同的意义.都表示返回值为int的无参函数

/没有写参数,代表可以传任何类型的实参
int fun()
{
    printf("fun函数\n");
    return 0;
}
int main(int argc, char *argv[])
  {
    fun(10);
    fun(10, 20);
    fun("hello");
    return 0;
  }

此代码在c++中编译失败,在c下编译通过,若加上void,c编译也不通过。故无参数建议写void。 

4、更严格的类型转换

c语言中枚举变量(底层是数字)允许赋其他int类型的值,c++不允许

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

5、结构体类型增强(重要)

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 6、c++新增bool类型

        标准c++的 bool类型有两种内建的常量true(转换为整数1)和 false(转换为整数0)表示状态。这三个名字都是关键字。bool类型只有两个值,true(1 值),false(0值) bool类型占1个字节大小给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

7、 三目运算符增

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

六、c++中的const

1、c++和c中的const都是修饰变量为 只读。

2、c语言 严格遵循 const修饰的是只读变量,但可以通过指针修改其值。C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 3、c++的const 会对变量 优化,不可以通过指针修改其值。

        如果以常量初始化const修饰的变量 编译器会将变量的值 放入符号常量表中,不会立即给变 量开辟空间,只有当对a 取地址时 编译器才会给a开辟空间(只读变量)

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

通过指针变量p 访问空间内容*p取的是空间的值。通过变量名a 访问的是符号常量表中的值 。

 4、如果以变量初始化const修饰的只读变量,没有符号常量表,立即开辟空间,可以通过指针修改其值。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 5、如果以const修饰的是自定义类型的变量 也不会有符号常量表,立即开辟空间,可以通过指针修改其值。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 6、c++中尽量使用const代替define

//#define A 10
const int A=10;
  • const有类型,可进行编译器类型安全检查。#define无类型,不方便进行类型检查
  • const有作用域,而#define不重视作用域,宏不能作为命名空间、结构体、类的成员,而const可以

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

七、引用

1、引用的定义

        引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference).

引用的本质:给变量名取别名        

引用的步骤:T &别名 = 变量名;(T为任意类型)

普通变量引用 :

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 数组引用:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

指针变量引用:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

函数引用:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 注:引用(取别名)只有一次

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

2、引用作为函数的参数 

        节约空间,函数内部可以 通过 引用 操作外部变量。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

3、引用作为函数的返回值类型 

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 以链式操作举例:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

4、 常引用

        给常量取别名

举例:

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

常引用 作为函数的参数:防止函数内部修改外部的值:

 C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 八、inline内联函数

1、内联函数概述

        内联函数:在编译阶段 将内联函数中的函数体替换函数调用处。避免函数调用时的开销。

注:内联函数 必须在定义的时候 使用关键字inline修饰, 不能在声明的时候使用inline

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

2、 宏函数和内联函数的区别

宏函数和内联函数 都会在适当的位置 进行展开避免函数调用开销。

宏函数的参数没有类型,不能保证参数的完整性。

内联函数的参数有类型,能保证参数的完整性。

宏函数在预处理阶段展开

内联函数在编译阶段展开

宏函数没有作用域的限制,不能作为命名空间、结构体、类的成员

内联函数作用域的限制,能作为命名空间、结构体、类的成员

3、内联函数条件

不能存在任何形式的循环语句

不能存在过多的条件判断语句

函数体不能过于庞大

不能对函数取地址

4、内联函数的注意事项

  • 在内联函数定义的时候加inline修饰
  • 类中的成员函数 默认都是内联函数(不加inline 也是内联函数)
  • 有时候加上inline也不一定是内联函数,不加inline修饰也有可能是内联函数。 由编译器根据内联条件决定。

九、函数重载

1、函数重载的概念

        在传统c语言中,函数名必须是唯一的,程序中不允许出现同名的函数。在c++中是允许出现同名的函数,这种现象称为函数重载。函数重载的目的就是方便使用函数名。

        函数重载:用同一个函数名 代表不同的函数功能。

        函数重载 是c++的静态多态的特性。

2、函数重载的条件

同一作用域,函数的参数类型、个数、顺序不同都可以重载

注:返回值类型不能作为重载的条件

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

c++中 不能直接将函数名作为函数的入口地址 :函数名和参数 共同决定函数的入口地址

十、缺省函数

        C++在声明函数原型的时可为一个或者多个参数指定默认(缺省)的参数值当函数调用的时候如果没有指定这个值,编译器会自动用默认值代替。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 注:如果函数的某个参数设置为默认参数, 那么这个参数的右边的所有参数 都必须是默认参数。

十一、占位参数

        重载++运算符,适用于函数名及参数形同的重载。

C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习

 占位参数 也可以是缺省参数(默认参数),但使用时容易产生二义性

 C++面向对象程序设计-基础入门(超详细),c++,c++,开发语言,学习文章来源地址https://www.toymoban.com/news/detail-603346.html

到了这里,关于C++面向对象程序设计-基础入门(超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++面向对象程序设计 - 类和对象进一步讨论

            在C++中,关于面向对象程序设计已经讲了很大篇幅,也例举很多案例,此篇将通过一些习题来进一步了解对象、静态成员、指针、引用、友元、类模板等等相关知识。         示例代码:         如上代码,运行后结果如下图:          现在将上述代码中,第

    2024年04月16日
    浏览(61)
  • Python-基础篇-类与对象/面向对象程序设计

    “类”是物以类聚的 “类” 类 和 对象 是 面向对象编程的 两个 核心概念 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的, 不能直接使用 特征 被称为 属性 行为 被称为 方法 类 就相当于制造飞机时的 图纸 ,是一个 模板 ,是 负责创建对象的 定义类📚

    2024年01月19日
    浏览(49)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

    开始课程:P11 1_1. this指针 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT C++是没有自身编译器的,需要使用C语言的编译器,所以C++在编译时需要把语言转换为对应的C语言。 实例1: C++程序到C程序的翻译:(下图好理解,

    2024年02月22日
    浏览(49)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】

    开始课程:P7 2_2. 构造函数 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT 1、成员函数的一种 名字与类名相同,可以有参数,不能有返回值(void 也不行) 作用是对对象进行初始化,如给成员变量赋初值 如果定义类时没

    2024年02月19日
    浏览(43)
  • [ XJTUSE ]JAVA语言基础知识——第一章 面向对象程序设计思想

    类描述了一组有相同 特性 (属性)和相同 行为 (方法)的对象,类和对象是面向对象思想的两个核心概念 · 人类是一种类,每一个具体的人则是这个类的对象 用面向对象程序来模拟真实世界 发现并创建类 发现类的特征 发现类的行为 在面向对象程序中,对象的特征由各种

    2023年04月13日
    浏览(82)
  • 面向对象程序设计

    【面向对象程序设计】(OOP)与【面向过程程序设计】在思维方式上存在着很大的差别。【面向过程程序设计】中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作。而【面

    2023年04月13日
    浏览(42)
  • Kotlin程序设计(二)面向对象

    我们在前面已经学习了Kotlin程序设计的基础篇,本章我们将继续介绍更多Kotlin特性,以及面向对象编程。 其实函数我们在一开始就在使用了: 我们程序的入口点就是 main 函数,我们只需要将我们的程序代码编写到主函数中就可以运行了,不过这个函数只是由我们来定义,而

    2024年02月01日
    浏览(50)
  • 【C++ 程序设计入门基础】- 第4节-函数

    函数是对实现某一功能的代码的模块化封装。  函数的定义: 标准函数: 输入 n 对整数的 a、b ,输出它们的和。 运行结果如下:  无返回值: 输入n,输出1~n之间所有整数。 运行结果:  无参数: 输入n,如果n为10的倍数,输出3个“very good!”。  运行结果如下:  传值参

    2024年01月17日
    浏览(57)
  • 2023.5.5 面向对象程序设计实验报告

    实验项目名称:模板 1、熟练掌握函数模板和类模板的定义格式。 2、熟练运用函数模板和类模板解决实际问题。 1、复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个

    2024年02月02日
    浏览(115)
  • 面向对象程序设计第三次bolg

    本次博客针对面向对象程序设计的课程所发的PTA作业7,8以及期末考试中的面向对象编程题的分析和总结,重点介绍课程成绩统计程序系列题目以及期末考试的编程题。 在这次作业中7-1、7-2内容和考点相同,在此我分析一下7-2Hashmap的排序这个问题。 7-2 容器-HashMap-排序 分数

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包