C++语言编程

1.概述

        C++语言是一门面向对象的编程,,它的优点是容易维护,出现问题可以精确定位到。“C”with Class”阶段,C语言基础上的特征主要有:类及派生类、共有和私有成员、构造函数和析构函数、友元、内联函数、赋值运算符的重载,等等。

2.C++里的特性以及专业术语

(1)类:class
    描写现实世界中的事物(包括特征和行为)
(2)对象
    对象是类的实例化,实实在在存在于现实世界中,特指的概念
(3)继承
    相当于是一个新类共享了另一个或多个类的特征和行为,该新类和其他类的关系,称之为继承
(4)多态
    多种形态,一种接口,多种方法
(5)封装
    c语言里函数就是封装的概念,将数据和数据的操作封装在一起
(6)组合(聚合)
    一个类中包含了另一个类的对象,就将类和另一个类的对象的关系,称之为组合关系
(7)静态联编(静态绑定)
    一个数据的表达式的类型在编译的时候就已经确定了,称之为静态绑定
(8)动态绑定(动态联编)
    一个数据的表达式的类型在运行的时候才确定,称之为动态绑定,典型:多态
(9)特征&属性
    在C++特征&属性就是代表变量,如果变量存在于类中,那么称之为成员变量
(10)行为&方法
    在C++行为&方法就是代表函数,如果函数存在于类中,那么称之为成员函数

3.命名空间的使用

1.命名空间是在全局范围内取一块区域并命名。

格式为:

namespace name
{
    int a;
    //代码块;
}

其中,name为自己取的标识符的名称

范围命名空间的格式有三种:

name::a;//其中,::为域作用符,告诉程序在该作用域下使用到的a为命名空间里面的a

using name::a;

也可以访问整个命名空间里面的内容,格式为

using namespace aa;

无名命名空间的访问格式为:

::需要访问的内容

注意点:

(1)命名空间是可以发生嵌套
(2)命名空间可以分为有名的命名空间和无名的命名空间)
(3)命名空间是属于全局的一部分,只不过是取了全局的一块区域命了一个名称而已
(4)访问命名空间的时候需要用到域作用符号

2.动态内存

动态内存:程序在运行时才分配的空间,称之为动态内存,例如,在C语言里,可以用malloc和free两个函数,来动态的开辟堆区空间和释放堆区空间,C++提供了new和delete操作符来操作堆区的空间(动态的开辟空间)
new:用于开辟堆区空间,相当于是C里的malloc
delete:用于释放堆区空间,相当于是C里的free

C++中堆空间的开辟格式为:

int   * p  = new int  ;//在堆区开辟int类型大小的空间,并且用p指向该空间

释放堆空间:

delete p;

数据类型(内置的基本的数据类型和自定义的数据类型) * 标识符名称  =  new  数据类型(初始值) ;//在堆区开辟变量地址空间,用标识符名称来指向堆区空间,堆区空间的大小就是数据类型的大小,同时向堆空间里存放初始值
 

试着回答malloc/free和new/delete的异同点?
相同点:
    malloc/free和new/delete都是在堆区申请空间和释放堆区空间
不同点:
(1)C里的malloc/free是函数,C++里new/delete是一个操作符
(2)C里的malloc/free开辟堆区空间的时候不能进行初始化的工作,C++里的new/delete开辟空间的时候能进行初始化工作
(3)C里的malloc/free开辟堆区空间的时候需要手动的去计算空间的大小,C++里的new/delete开辟空间的时候自动计算空间的大小(根据数据类型而定)
(4)C里的malloc/free开辟堆区空间的时候需要强制类型转换,C++里的new/delete开辟空间的时候不需要强制类型转换
(5)C里的malloc/free仅仅只是做了开辟堆区空间的工作,没有做其他的工作,C++里的new/delete开辟空间的时候,不仅仅只是开辟了空间,而且还可以执行构造函数(完成变量的初始化工作)

四.类和对象

1.创建类的关键字为class

class   类名(标识符名称)
    {
        //特征---变量
        //行为---函数
    };

因为类是用来描述现实世界中的事物,是抽象的,不是特指一个具体的事物,所以调用时需要进行实例化(对象)

2.对象

对象是类的实例化(特指实际的例子),是特指的概念
对象的实例化格式:
(1)在栈区实例化--------栈区实例化的对象,不需要用户手动的去释放内存,编译器会自动释放内存
格式:
    类名   对象名(标识符名称);

(2)在堆区实例化-------堆区实例化的对象,需要用户手动的去释放内存,如果不释放,很容易造成内存泄露
 格式:
    类名   *  对象名(标识符名称)= new  类名;

3.构造函数

构造函数是一种特殊的函数,它实质还是称为函数,如果用户没有显示的书写构造函数,那么编译器会帮用户自动的生成了一个默认的构造函数,反之,那么编译器就不会自动生成默认的构造函数
作用:就是为了初始化类的成员变量
格式:
    类名 (参数列表)
    {
        //代码块---用于初始化类的成员变量
    }

(1)、构造函数的显示调用
格式:
    类名 对象名(构造函数参数列表);//这时候就显示的调用类的构造函数
(2)、构造函数的隐式调用
格式:
    类名(构造函数参数列表);//隐式的调用类的构造函数

总结:构造函数与普通函数的区别
不同点:
a、普通函数前有返回值类型,而构造函数前没有返回值
b、普通函数后面没有初始化列表,而构造函数后有初始化列表
c、普通函数调用的时候以显式调用的方式,而构造函数不仅可以显示的调用还可以隐式的调用
相同点:
d、都可以带参数或者是不带参数
e、都可以发生重载

4.析构函数

C++里的析构函数也是一种特殊的函数,它实质也是函数,如果用户没有显示的书写析构函数,那么编译器会自动帮用户生成一个默认的隐藏的析构函数,反之,那么编译器就不会帮用户生成一个析构函数。
作用:释放空间
格式:
    ~类名 ()
    {
        //代码块
    }

调用时机:
a、当类的对象使用完成之后,会调用一次析构函数
b、当类的指针对象被销毁的时候,会调用一次析构函数
c、当main函数体结束时会调用析构函数    

总结:
(1)、析构函数不能带参数
(2)、类体里面只允许有一个析构函数(析构函数不能发生重载)
(3)、析构函数前没有返回值

 

4.

this指针
    它是一种特殊的指针,它是存在于类的普通成员函数里,C++提供this指针的目的是为了解决二义性问题,并且它是隐式的指针,它是指向当前类。

static
    用static声明函数或者是变量为静态的,作用跟C里讲的static作用一样

注意:
a、静态成员函数里没有this指针
b、静态成员函数不能访问类的非静态成员
c、类的非静态成员函数可以访问类的静态成员

5.友元
    目的:给类的外部提供一个访问类的私有成员的接口
关键字:friend,用关键字来声明友元函数和友元类
(1)友元函数
    C++提供了友元函数就可以通过友元函数访问到类的私有成员,C++规定是友元函数声明在类里,就表示该函数是该类的友元,那么就可以通过友元函数访问类的私有成员,友元函数的定义放置在类的外部。
声明格式(在类里声明):
    friend 返回值类型  函数名(参数列表);//友元函数的声明
定义(在类外定义):
    返回值类型  函数名(参数列表)
    {
        //函数体
    }
注意:
a、友元函数虽然声明放置在类的内部,但是它不属于类的成员函数
b、友元函数没有this指针
c、给类的外部提供一个访问类的私有属性成员的接口

五.小结

学习c++之后,遇到的以下一些问题小结:

1.异常的一些处理方式

throw:
    抛出异常
格式:
    throw  抛出异常的类型的数据;
try:
    检测代码是否产生了异常

std::exception    该异常是所有标准 C++ 异常的父类。
std::bad_alloc    该异常可以通过 new 抛出。
std::bad_cast     该异常可以通过 dynamic_cast 抛出。
std::bad_exception     这在处理 C++ 程序中无法预期的异常时非常有用。
std::bad_typeid  该异常可以通过 typeid 抛出。
std::logic_error 理论上可以通过读取代码来检测到的异常。
std::domain_error      当使用了一个无效的数学域时,会抛出该异常。
std::invalid_argument 当使用了无效的参数时,会抛出该异常。
std::length_error      当创建了太长的 std::string 时,会抛出该异常。
std::out_of_range      参数超出有效范围 
std::runtime_error     理论上不可以通过读取代码来检测到的异常。
std::overflow_error  当发生数学上溢时,会抛出该异常。
std::range_error     当尝试存储超出范围的值时,会抛出该异常。
std::underflow_error  当发生数学下溢时,会抛出该异常。
3、自定义异常类
    需要继承C++提供的所有异常的基类exception,可以在自定义的异常类重写what()方法,用于查看产生的异常的类型

对于异常这一方面的学习不够清晰,尤其是自定义异常类,需要加深学习和巩固。

2.模板

在进行模板这一知识点的学习时,个人觉得这个模块有一定的难度

关键字:template
template  <模板形参1,模板形参2,.......> 函数的返回值   函数名(函数形参列表);

它的数据类型在很多地方的替换,调用不是很熟练。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
程序设计教程通常会涵盖编程的基本概念、语法、算法和数据结构等内容。在C/C++语言编程方面,它们是广泛使用的编程语言,可用于开发不同类型的应用程序,从简单的命令行程序到复杂的桌面应用和嵌入式系统。 在程序设计教程中,首先会介绍C/C++语言的基本语法,包括变量、数据类型、运算符、控制结构和函数等。学习者会通过编写简单的程序来理解如何声明变量、使用运算符进行计算、使用条件语句和循环结构来控制程序流程,以及如何定义和调用函数。 接下来,教程会介绍C/C++语言的核心概念,如指针、数组和字符串等。学习者会了解如何使用指针来操作内存地址,如何使用数组来存储和处理多个数据,以及如何处理字符串和字符操作。 在更高级的教程中,会介绍C/C++语言的面向对象编程(OOP)概念,如类、对象、继承和多态等。学习者将学习如何使用类和对象来组织和管理程序,如何使用继承和多态来实现代码的重用和灵活性。 此外,教程还可能包含常用算法和数据结构的介绍,如排序算法、查找算法和链表等。学习者可以学习如何实现这些算法和数据结构,并将其应用于解决实际问题。 总之,在C/C++语言的程序设计教程中,学习者将通过理论和实践相结合的方式,逐步掌握编程的基础知识和技能,从而能够独立开发和维护各种类型的程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值