c++的概述

news2025/2/24 15:18:37

c++是面向对象、泛型编程。

1、 第一个c++程序:

#include <iostream>

using namespace std;

int main(int argc,  char *argv[])
{

    //cout代表终端输出设备  endl换行
    cout << "Hello World! " << endl;
    cout << 100 << endl;
    std::cout<< 'h' << endl;

    //cin代表终端输入设备
    int num;
    //scanf("%d",%num)   c语言的输入
    std::cin >> num;
    cout<<"num = "<<num<<endl;

    return 0;
}

 

 2、面向过程和面向对象

1、面向过程:

面向过程是一种以过程为中心的编程思想,其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用。
面向过程我们所关心的是解决一个问题的步骤,举个例子,汽车发动、汽车熄火,这是两个不同的事件,对于面向过程而言,我们关心的是事件本身,因此我们会使用两个函数完成以上两个动作,然后依次调用即可。

程序=数据结构+算法

算法:对数据的操作步骤(查找、排序)

2、面向对象: 

面向对象则是一种以对象为中心的编程思想,就是通过分析问题,分解出一个一个的对象,然后通过不同对象之间的调用来组合解决问题。建立对象的目的不是为了完成某个步骤,而是为了描述某个事物在解决整个问题的过程中的行为。
如上面的例子,汽车发动、汽车熄火,对于面向对象而言,我们则关心的是汽车这类对象,两个事件只是这类对象所具备的行为。

对象 = 算法 + 数据结构 程序 = 对象 + 对象 + ……

 

3、c++的三大特性:封装、继承、多态

 封装

数据和方法封装在一起,加以权限区分,用户只能通过方法操作自身的数据。 数据:成员数据  方法:成员函数

 继承

继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的 特征 和能力。 继承的作用:避免公用代码的重复开发,减少代码和数据冗余

多态 

多态性可以简单地 概括为“一个接口,多种方法”,字面意思为多种形态。程序在运 行时才决定调用的函数,它是面向对象 编程领域的核心概念。

 

c++对c的扩展之::

1、作用域运算 ::   (解决的是 归属问题)

如果局部和全局同名 可以直接访问全局变量


#include <iostream>

using namespace std;

int a = 10;

void tets()
{
   int a = 20;
   cout<<"局部变量:a = "<<a<<endl;
   //::a显示使用全局变量
   cout<<"全局变量:a = "<<::a<<endl; 

}

int main(int argc,  char *argv[])
{
   
    tets(); 
    
    return 0;
}

 

c++对c的扩展之命名空间

在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。

1、命名空间的定义

namespace  命名空间名

{

        //打包的数据 和 函数

 }

#include <iostream>

using namespace std;

namespace A{
    int data1 = 10;
}

namespace B{

    int data1 = 20;
}

int main(int argc, char const *argv[])
{
    //加作用域 是最安全最简单的方法
    cout<<" data = "<<A::data1<<endl;  //10
    cout<<" data = "<<B::data1<<endl;   //20

    return 0;
}

 2、命名空间只能全局范围内定义(以下错误写法)

 3、命名空间可嵌套命名空间

#include <iostream>

using namespace std;

namespace A{
    int a = 10;

    namespace B{   //命名空间嵌套
    int a= 20;
   }  
}


int main(int argc, char const *argv[])
{
   
    cout<<"A::a : "<<A::a<<endl;  
    cout<<"A::B::a : "<<A::B::a<<endl;   

    return 0;
}

4、命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

#include <iostream>

using namespace std;

namespace A{
    int a = 10;
}

namespace A{

    void func()
    {
        cout<<"hello namespace!"<<endl;
    }
}

int main(int argc, char const *argv[])
{
    cout<<"A::a :"<<A::a<<endl;
    A::func();
    
    return 0;
}

 5、声明和实现可分离

 

#include <iostream>

using namespace std;

namespace C{
    int a;
    void set_a(int data);
    int  get_a();
}
void C::set_a(int data)
{

    a = data;
    return;
}

int C::get_a()
{
    return a;
}

int main(int argc, char const *argv[])
{
    C::set_a(100);
    cout<<"a = "<<C::get_a()<<endl;
    return 0;
}

 6、无名命名空间

无名命名空间里面的数据和方法 只能在当前源文件使用 就类似加static修饰

#include <iostream>

using namespace std;

namespace{

    int a = 10;
    void func()
    {
        cout<<"hello namespace!"<<endl;     
    }
}

int main(int argc, const char** argv) {

    cout<<"a : "<<a<<endl;
    func();
    return 0;
}

 内部连接:只在当前源文件用

 外部连接:可以在其他源文件使用

 

7、命名空间别名

#include <iostream>

using namespace std;

namespace veryLongName{

    int a = 10;
    void func()
    {
        cout<<"hello namespace"<<endl;
    }
}

int main(int argc, char const *argv[])
{
    namespace newName = veryLongName;
    cout<<"veryLongName::a :"<<newName::a<<endl;
    veryLongName::func();
    newName::func();
    return 0;
}

 

 

8、using 是修饰 命令空间 里面的 某些数据或方法

#include <iostream>

using namespace std;

namespace D{

    int a = 10;

}

int main(int argc, char const *argv[])
{
    //下列出现的a来自D命名空间
    using D::a;

    //防止同名  否则报错
    //int a = 20;    
     cout<<"a = "<<a<<endl;

    return 0;
}

 

9、using声明碰到函数重载

#include <iostream>

using namespace std;

namespace A{

    void func(){}
    void func(int x){}
    void func(int x,int y){}
}

int main(int argc, char const *argv[])
{
    //下列出现的func来自A命名空间
    using D::func;


     func();
     func(10);
     func(10,20);

    return 0;
}

如果命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集 合

 

10、using 是修饰 整个命名空间

#include <iostream>

using namespace std;

namespace D{

    int a = 10;
    int b = 20;
    int c = 30;
}

int main(int argc, char const *argv[])
{   
    //声明识别整个命名空间 里的数据和方法
    using namespace D;//强调的是命名空间名

    //先查看当前普通变量a 如果没有 再查看命名空间中有没有a
    cout<<"a = "<<a<<endl; //10

    //不会冲突
    int a = 100;
    cout<<"a = "<<a<<endl;//100就近原则
 
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element-Plus el-upload组件批量上传图片问题记录

上传图片组件踩坑记录 1. 第一次尝试 最初的写法如下&#xff0c;在本地跑的时候每上传一张图片调一次接口&#xff0c;虽然图片回显正常了&#xff0c;但是每次都会自动多调一个如下图所示的apply-login 报错404&#xff0c;部署到测试环境后&#xff0c;就是每次都报错&…

linux(信号产生中)代码来验证

我们应该如何理解我们调用系统接口并不是简单的调用系统接口这么简单就完事了---我们有时候也是需要使用由操作系统为我们提供的操作系统的层面的数据类型 sigset_t 我们来介绍一种类型&#xff0c;从我们之前学的图来看&#xff0c;每一个信号不管是在block表还是在pending表…

鄂尔多斯市政务协同办公平台,让全市政务更协同高效

近年来&#xff0c;国家高度重视数字政务建设&#xff0c;以数字化推进国家治理体系和治理能力现代化&#xff0c;助力建设人民满意的服务型政府。 2018年&#xff0c;国务院办公厅印发《进一步深化“互联网政务服务”推进政务服务“一网、一门、一次”改革实施方案》&#xf…

这份阿里巴巴内部Spring Cloud Alibaba全套笔记,几乎涵盖了所有操作

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringCl…

缓存数据一致性探究

缓存是一种较低成本提升系统性能的方式&#xff0c;自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说&#xff0c;软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时&#xff0c;也极易引入新的问题&#xff0c;自缓存…

一文让你明白软件测试该怎样入门?

我认为入门软件测试需要四个方面的知识or技能&#xff0c;它们是&#xff1a;业务知识、职业素养、基础知识、技术知识。 职业素养是一切的根基&#xff0c;因为人在职场就必须拥有必要的职业素养&#xff0c;软件测试工程师也不例外。基础知识和技术知识是两大支柱&#xff0…

【正点原子STM32连载】 第二十九章 DMA实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十…

第26节:cesium 高程数据下载(含源码+视频)

本节主要讲解高程dem数据下载方式 下载网址1: http://srtm.csi.cgiar.org/download 下载较慢,含全球高程数据 下载网站2:地理空间数据云 下载速度快,中国科学院计算机网络信息中心公布数据,正式可靠 下面主要介绍地理空间数据云的下载方式。 1.登录 2.选择高级检索 3.选择数…

【改进的多同步挤压变换】基于改进多同步挤压的高分辨率时频分析工具,用于分析非平稳信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一份配置轻松搞定表单渲染,配置式表单渲染器在袋鼠云的实现思路与实践

前段时间&#xff0c;袋鼠云离线开发产品接到改造数据同步表单的需求。 一方面&#xff0c;数据同步模块的代码可读性和可维护性较差&#xff0c;导致在数据同步模块开发新功能和定位问题的效率很低。另一方面&#xff0c;整体规划上&#xff0c;希望在对接新的数据源时&…

Mac版好用虚拟机CrossOver22.1.1,耗时时间少,加快办事效率

Mac系统仅适配自己的硬件&#xff0c;它的软件需要通过app store购买&#xff0c;所以很多Mac用户也为之烦恼。这种模式优点是稳定性与性能超强发挥&#xff0c;缺点也显而易见。 那该如何解决这一困扰呢&#xff1f;一般&#xff0c;我们会选择安装虚拟机软件&#xff0c;但这…

本地使用AutoML-nni进行超参数调优实验

目的&#xff1a;在自己的代码中NNI工具&#xff0c;进行超参数自动调优训练自己的项目&#xff0c;得到精度最高的一组超参数。 nni地址&#xff1a; GitHub - microsoft/nni: An open source AutoML toolkit for automate machine learning lifecycle, including feature e…

短视频矩阵视频智能剪辑源代码.源代码

短视频矩阵视频智能剪辑&#xff1a; * 添加/编辑视频 */ public function addVideoAction(){ $this->useLayout(dydqtshoppc-head.html); $id $this->request->getIntParam(id); //获取视频信息 $Video_model new App_Mod…

c++包管理器,不用每次都源码编译

pkg-config linux中的包管理器 例如opencv.pc文件&#xff0c;详细描述了库的使用依赖。cmake的find_package支持pc文件的查找 prefix/usr/local exec_prefix${prefix} includedir/usr/local/include libdir/usr/local/libName: OpenCV Description: Open Source Computer Vi…

矿工挖宝-第14届蓝桥杯国赛Scratch真题初中级组第4题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第146讲。 矿工挖宝&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第4题&…

MySQL(进阶篇3.0)

锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算机资源&#xff08;CPU、RAM、I/O&#xff09;的争用之外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

十五、实例化

第一部分 概念&#xff1a; 1&#xff09;引入 OpenGL ES 实例化&#xff08;Instancing&#xff09;是一种只调用一次渲染函数就能绘制出很多物体的技术&#xff0c;可以实现将数据一次性发送给 GPU &#xff0c;告诉 OpenGL ES 使用一个绘制函数&#xff0c;将这些数据绘制…

练习:有限状态机测试

练习&#xff1a;有限状态机测试 1 FSM 示例 在练习中&#xff0c;我们将使用两个 FSM。 两者都有输入字母 X {a, b} 和输出字母 Y {0,1}。 第一个 FSM 将称为 M1 并由以下有向图表示。 对于上面给出的每个 FSM Mi&#xff1a; 1.确定以下值&#xff0c;显示您的工作。 (a…

[MySQL]不就是SQL语句

前言 本期主要的学习目标是SQl语句中的DDL和DML实现对数据库的操作和增删改功能&#xff0c;学习完本章节之后需要对SQL语句手到擒来。 1.SQL语句基本介绍 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的编程语言。它允许用户在数据库中存…

AngularJs学习笔记--unit-testing

javascript是一门动态类型语言&#xff0c;这给她带来了很强的表现能力&#xff0c;但同时也使编译器几乎不能给开发者提供任何帮助。因为这个原因&#xff0c;我们感受到编写任何javascript代码都必须有一套强大完整的测试。angular拥有许多功能&#xff0c;让我们更加容易地测…