C++要点整理

Xilinx Aurora 8B/10B IP核详解和仿真 Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。 阅读详情
 

eg.

#include<iostream>

using namespace std;//使用命名空间,如若不是用则cout之类的函数名无法识别,必须在函数前加作用域即:std::cout

int main()//返回值必须为int型

{

cout<<"Hello World!"<<endl;

return 0;

}

 

命名空间:

namespace test

{

void show();

int print();

}       //后面没有分号

 

函数重载:函数名相同参数不同,不能通过返回值来判断,这样的函数称为重载函数

函数的默认参数必须从用往左赋值。

若最左边的参数有值,其后面的参数必须有值,否则报错

引用:

int &b=a;//把b作为a的别名//标准C++中不能引用数组

new:

int *p = new char ;        //delete p;

类:

注意事项:1.类名首字母大写//防止不必要的错误

                  2.结束的地方一定要有分号。

                  3.类名称之后紧跟的是私有成员

                  4.程序运行时类不存在,存在的只有对象

                  5.类内函数可以直接访问私有数据成员,类外函数不可

内联函数:

1.类内实现

2.使用inline关键字

构造函数:

1.将对象初始化到某一状态

2.在对象创建时自身调用

3.函数名是类名,没有返回值。

4.允许函数重载

5.当匹配所有情况时,在声明构造函数时需初始化但函数的实现部分参数不可带形参值

eg.

Point(int a = 0,int b = 0,int c = 0);//在类内函数的声明

Point::Point(int a,int b,int c)//在类外函数的实现

{

。。。。。。

}

拷贝构造函数

1.函数名是类名//一种特殊的构造函数,只是用对象初始化另一个对象

2.没有返回值

3.造型  Point(const Point &other);

返回对象与返回引用

返回对象时需创建临时对象,函数中的返回值全以拷贝的形式拷贝到被调用函数栈中的一个临时对象,表达式结束,临时对象即析构

返回引用时可以减少一个复制对象的过程,从而减少内存开销

返回对象时系统自动调用拷贝构造函数。

析构函数

1.~Point();

2.无参无返回值

3.做侍候清理工作

 

this指针:只会出现在成员函数中

 

静态数据成员:

class Student{
 
    private:
 static int number;
 string name;
};

int Student::number = 0;

将数据成员设计成静态数据成员后,该成员的变化仍然会在每次创建对象之后的名称赋值中反映出来。反映的结果存放在专属于Student类名空间的全局数据区中,不属于各个对象。整个类中只有一份number拷贝,所有的对象都共享这份拷贝。因此,输出学生总数时,访问的是惟一的静态数据成员,它不会因对象而异了。

由于静态成员脱离对象而存在的性质,所以该实体应在所有对象产生之前存在,因此,更适当的时机是在程序启动的时候,做其初始化。上面的初始化语句,似乎像个全局变量,但它属于Student类名空间。

该实体在程序中的唯一性,要求其不能跟着Student类定义放在头文件中,但它又确实Student类得一员,所以,放在类得实现代码中是最合适的。

定义静态成员的格式不能重复static关键字,但必须在成员名前冠以类名加域操作符,以表示成员的类属。如果不讲其初始化,则系统将为该成员清0。

静态成员函数

上面的静态成员数据例子中,访问静态数据成员是放在成员函数set中的。也就是说,必须创建了对象,由对象捆绑一个成员函数,去操作静态成员。难道对象不存在时,就不能观察静态数据成员了?如果一个有一个过程专门处理某类的对象个数,难道还要专门创建一个多余的对象来达到访问静态成员的目的?显然这并不是理想的方法。然而,让外部直接访问静态成员有失安全性和可维护性。如果一个数据置于大庭观众之下,损坏了谁也不认账,找谁说理去?因此与数据成员一样,将静态成员做成私有的,用静态成员函数去访问静态数据成员是合适的。

#include <iostream>

using namespace std;

class Student
{
   public:
 void set(string str){
  name = str;
  ++ number;
 }
  static int printNumber(){cout << number << "total numbers\n"}
  void print(){cout << name << "-> students are" << number << "numbers\n";}
};

int Student::number = 0;

void fn()
{
   Student s1;
   s.set("Jenny");
   Student s2;
   s2.set("Randy");
   s1.printNumber();
}

int main()
{
   Student s;
   s.set("Smitch");
   fn();
   Student::printNumber(); 
}

在类中声明静态成员函数,要在成员函数名前加上关键字static。静态成员函数并不受对象的牵制,可以用对象名调用静态成员函数,也可以用类名加上域操作符调用静态成员函数,这时候,将它看做是某个名空间的一个函数。

静态成员函数的实现位置与成员函数的实现位置应该是一起的,静态成员函数如果不在类中实现,而在类得外部实现时,类名前应免去static关键字。成员函数的静态性只在第一次声明的时候才是必要的。

因为静态成员函数可以不以捆绑对象的形式调用,静态成员函数被调用时,没有当前对象的信息,所以静态成员函数不能访问数据成员。

static int printNumber(){cout << name << number << "total numbers\n";}

则编译通不过。这并不是说它没有私有数据访问的权限,如果在静态成员函数,给它传递一个Student对象:

static int printNumber(Student &s)
{
    cout << "My name is " << s.name << "\n";
    cout << s.number << "total numbers\n"
}

那么,访问私有数据便是它的权利。

友元函数:

1.声明时需用关键字friend修饰,实现时不需要

2.友元函数不属于类,他是一个类外函数。

3.友元关系不能传递

4.可以定义友元类,关系是单向的。

5.友元类需前向引用声明,只能使用被声明的符号,不能类的任何细节。

我们已知道类具有封装和信息隐藏的特性。只有类得成员函数才能访问类得私有成员,程序中的其他函数时无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。

为了解决上述问题,提出一种是用友元得方案。友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但它可以访问类中的私有成员。友元得作用在于提高程序的运行效率,但是,它破坏了类得封装性和隐藏性,使得非成员函数可以访问类得私有成员。

常对象和常对象成员

一、常对象

1.格式:const 类名 对象名(参数列表);

如声明box类的一个对象为常对象:const box b1(3,4,5);或者:box const b1(3,4,5);

2.注意:
   * 常对象的数据成员必须是常变量,而且必须要有初值。
   * 常对象只能调用其常(const 型)成员函数,不能调用非const型成员函数。而常成员函数可以访问常对象数据成员,但不能修改
   * 常对象只是其数据成员是const型的,它的成员函数可以是const型或非const型。
   * 常对象的数据成员只能引用,不可修改,如果一定要修改,可将需要修改的数据成员声明为mutable;
     如:mutable int count;


#include <iostream>

using namespace std;

class box
{
    public:
 box(int =0,int =0,int =0);
        int print() const;//常成员函数声明

    private:
 int wid,hig;
 mutable int len;//声明常对象中的len值可以修改 
};

//construct function

box::box(int l,int w,int h):len(l),wid(w),hig(h)
{
}

//const member function

int box::print()const
{
   len = len * 2;
   cout << len << "*" << wid << "*" << hig << "=" << len * wid * hig << endl;
}

//main function

int main()
{
    const box b1(2,3,4);//常对象,则只能调用常成员函数
   
    b1.print();
   
    return 0;
}

二、常对象成员(常数据成员和成员函数)

1、常数据成员

在类体中将数据成员声明为const型,即为常数据成员,值得注意的是,因为不能常数据成员赋值,所以对常数据成员的初始化必须要用构造函数的初始化列表来完成。

如在time类体中声明了为常数据成员hour,则:

time::time(int h)
{
 hour = h;//非法
}

time::time(int h);hour(h)
{
 
}


2.常成员函数

常成员函数含义是函数体得代码不能修改实参的值,但是可以修改形参的值

a.常成员函数不能更新对象的数据成员
b.不能调用该类中没有const修饰的成员函数

格式:返回类型 函数名称 (参数列表) const//函数声明

返回类型 所属类名::函数名称(参数列表) const //函数定义

注意:关键字const是函数的一部分,在函数声明和定义部分都必须包含。
      常成员函数可以引用const或非const型数据成员,但只能引用,不可修改。
      常成员函数不能调用另一个非const型成员函数

 

派生类构造函数

派生类::派生类名(基类所需形参,本类成员所需形参):基类名(参数表)

{本类成员初始化。。。}

组合类和继承类一起出现,构造函数的调用顺序

1.组合和继承同时出现,继承优先

2.继承通过类名去触发构造函数,构造顺序和继承顺序一样

3.组合通过对象名触发其构造函数,构造顺序和生命顺序一样。

运算符重载

声明形式

函数类型 operator 运算符(形参){。。。。。}

1.重载为类的成员函数//参数个数=原操作数个数-1(后置++、--除外)

2.重载为友元函数时 参数个数=原操作数个数

3.前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数时需要有一个整形形参

如:Clock &operator ++();//前置单目运算符

      Clock operator ++(int);//后置单目运算符

 

虚函数:

1.虚函数是动态绑定的基础

2.是非静态成员函数

3.在类的声明中,在函数原型之前写virtual

4.本质:不是重载声明,而是覆盖

5.调用方式:通过基类指针或引用,执行时会根据指针指向的对象的类,决定调用哪个函数。

抽象类:

带有纯虚函数的类

纯虚函数:virtual 类型 函数名(参数表)=0;

 

函数模板:

建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型表示。

template<typename T>//或者template<class T>

T name(T a,T b)

{

。。。。

return T;

}

STM32实战开发(133):基于STM32的智能GPS定位跟踪系统开发 本文详细介绍了如何基于STM32开发一个智能GPS定位跟踪系统。系统使用NEO-6M GPS模块获取实时定位数据,并通过SIM800L GPRS模块将定位信息上传到远程服务器。通过OLED屏幕实时显示位置数据,使用SD卡存储历史轨迹,并提供蜂鸣器报警功能。项目实现了GPS定位数据的获取、解析、存储和传输,为智能定位系统提供了完整的解决方案。 阅读详情

相关推荐

高效复用PCB设计:Cadence Sub-Drawing跨项目复制技巧

本文详细介绍了Cadence Allegro中Sub-Drawing功能的应用技巧,帮助PCB工程师高效复用成熟设计模块。通过分步教学,从精准导出到完美导入,并提供了解决坐标错位与DRC冲突的实用避坑指南。掌握这一技巧能显著提升设计效率,实现团队知识的标准化积累与快速复用。

weixin_29172201的博客 397

关于C++中类的成员函数实现的位置问题

类的成员函数可以在类内实现的, 他们主要的区别在于, 类内实现的成员函数有可能被编译器优化为内联函数, 而类外的就得加关键字inline。 这里要注意的是,及时加入了inline或者是在类内实现的成员函数, 也不一定能够成为内联函数,如果编译器觉得函数太复杂就不内联了。 PS: 你的结论是正确的,一般的比较短小的函数写在类内做内联还是比较好的。 写在类外有利于隐藏实现的细节,达

Sun19910114的专栏 1606

libjpeg-turbo图片解码 VS opencv

本文对比了libjpeg-turbo和opencv在图像解码层面的耗时情况,及解码数据是否存在diff

优快云_WHB的博客 834

C++语法要点整理

1.类有默认复制构造函数2.自己写的类的复制构造函数不一定能做到复制功能 看自己怎么写了。(说明复制构造函数不一定就能起到复制的作用!!)3.复制构造函数起作用的三种情况:(1)用一个对象初始化另外一个对象(2)如果有个函数的参数是类A的对象,那么该函数被调用时,类A的复制构造函数将被调用(3)如果函数返回值是类A的对象,函数返回时,A的复制构造函数将被调用。4.类型转换构造函数 可以转类型赋值5...

weixin_37328901的博客 786

智能车小白也能懂:手把手教你用LM358和工字电感搭建电磁循迹模块(附PCB设计避坑)

本文详细介绍了如何利用LM358运放和工字电感搭建智能车电磁循迹模块,从电感选型、电路设计到PCB布局和焊接调试,提供全流程实战指南。特别针对新手常见问题,如信号干扰、电路饱和等,给出具体解决方案和参数配置,帮助智能车比赛爱好者快速掌握电磁循迹技术。

weixin_30307921的博客 401

Qt Installer Framework4.6.1的最基础使用1(win10+离线安装包 )

因工作需要,win程序发布后,打包成一可执行exe文件,且兼容win7系统笔者记录了一些关键要点,供有需要的小伙伴使用。

aggs1990的专栏 904

google_cpp编程规范要点整理

文件夹名一律小写,单词之间用下划线连接。 文件名一律小写,单词之间用下划线连接。 源文件名以.cpp结尾,头文件名以.h结尾,接口头文件名以_interface.h结尾。 头文件#define保护的格式: #define 工程名_文件夹名1_子文件夹名2_头文件名_H_,全部大写,单词之间用下划线连接。 头文件,特别是接口头文件中,不是必须用#includ

guang11cheng的专栏 1114

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 493

C++中const要点整理

1、C++中的const默认为内部连接,也就是说,const仅在被定义过的文件里才是可见的而在连接时不能被其他编译单元看到。 连接的原理? 2、定义一个常量(const)时,必须赋一个值给它。 const int a1;//编译错误,没有进行初始化,可以用extern关键字进行声明 const int *a2;//编译警告,a2是一个指向int常量的指针,它可以指向任何符合条件的地址,所以

不积跬步无以至千里 649

Windows Server上OpenVPN 2.4.8双因子认证实战:账号密码+证书,附一键脚本

本文详细介绍了在Windows Server上部署OpenVPN 2.4.8双因子认证(账号密码+证书)的实战方案,包括架构设计、证书体系规划、环境准备、服务器端配置及客户端自动化部署。通过一键脚本和优化配置,提升企业VPN的安全性和运维效率,特别适合金融、医疗等对安全性要求高的行业。

weixin_29231221的博客 465

视频理解与处理——OpenClaw视频能力深度解析(2026视频版)

本文介绍了OpenClaw视频理解与处理的核心技术,重点分析了视频预处理流程。通过VideoProcessor类实现视频加载、帧采样、尺寸调整和归一化等基础处理功能,支持本地和在线视频源处理,为后续视频分析任务提供标准化输入。预处理模块采用均匀采样和标准化方法优化视频数据,确保动作识别、场景分析等高级应用的准确性,展现了OpenClaw强大的视频处理能力。

一键难忘的博客 464

C++ 与const相关的要点整理

1.const与变量(基本数据类型变量) 在C++中,被const关键字修饰的变量,其值在程序运行时不可改变,我们称之为即常量。被const关键字修饰的变量和普通变量一样,拥有他自己的储存空间。 定义const变量的格式为: //const 数据类型 变量名 = 常量值; const int i = 100; 或者交换const与数据类型的位置也是可以的: int const i ...

Melonl的博客 323

基于深度学习的智能监考系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

行为检测与识别:能够自动识别考生在考试中的异常行为,如作弊、看手机、交头接耳等。实时监控:在考试期间,系统能够对考生的行为进行实时监控,及时发出警报。用户交互:通过简洁易用的UI界面,便于监考人员进行实时监控、查看警报和视频回放等操作。行为分析与反馈:系统能够识别出考生的违规行为,并提供反馈。本文详细介绍了如何构建基于YOLOv5的智能监考系统,从数据集的准备、YOLO模型的训练,到UI界面的设计与实现,展示了一个完整的深度学习监控系统。

YOLO 781

C++知识要点整理02:指针

1.用指针作函数参数 函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。 2.用指针变量作函数形参接收数组地址 数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。 3.C++编译系统将形参数组名一律作为指针变量来处理。 例如:void select_sort(int array[],int

路上的点滴 1083

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++知识要点整理03:引用

1.引用  对一个数据可以建立一个“引用”,它的作用是为一个变量起一个别名。这是C++对C的一个重要扩充。  例如:int a;        int &b=a; 以上声明了b是a的引用,即b是a的别名。经过这样的声明后,使用a或b的作用相同,都代表同一变量。可以这样理解引用:通过b可以引用a。注意:在上述声明中,&是引用声明符,并不代表地址。不要理解为“把a的值赋给b的地址”。在数据类型

路上的点滴 1067

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C/C++ 学习要点总结(未整理)

 C/C++ 学习要点总结(未整理) 1. 内存对齐问题(struct a{ int a//4 ;char b//1 ;double c//8;}; //sizeof(a)=16 2. Continue语句的使用 3. 拷贝构造函数的作用 4. 多继承且有内嵌对象时的构造函数派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1

sunewer的专栏 1363

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Effective C++ 要点整理(一)

Effective C++ 学习笔记 条款07:为多态基类声明virtual析构函数 C++曾明确指出,当派生类(derived class)对象经由一个基类(base class)指针被删除,而该基类还带着一个non-virtual析构函数,其结果未有定义-实际执行时通常发生的是对象的派生成分没被销毁。而其基类成分通常会被销毁,于是造成一个诡异的“局部销毁”对象。这会造成资源泄露、

ccnnli的博客 646

C++知识要点整理08:类模板

1.类模板    对于功能相同而数据类型不同的一些函数,不必一一定义各个函数,可以定义一个可对任何类型变量进行操作的函数模板,在调用函数时,系统会根据实参的类型,取代函数模板中的类型参数,得到具体的函数。   例如:template //声明一个模板,虚拟类型名为numtype             class Compare                   //类 模板名为Comp

路上的点滴 1034

二刷 C++ Primer 要点整理 Chapter 7.

C++ Primer 要点整理 Chapter 7. this this的类型是 ExampleClass * const,所以不能将this绑定到常量对象上。所以也就不能在常量对象上调用普通成员函数。 ExampleClass::Func(&amp;Obj, other params…);编译器眼中对成员函数的调用。 const成员函数 上一条提到this的默认类型是 Exa...

DIGTA的博客 200

二刷 C++ Primer 要点整理 Chapter 6.

C++ Primer 要点整理 Chapter 6. 函数内局部静态对象 static 局部对象生命期直到程序终止 size_t count_calls() { static size_t ctr = 0;//调用结束后仍有效 return ++ctr; } 数组引用形参 f(int &arr[10]) //首先是数组,再是引用的数组 f(int (&arr)[1

DIGTA的博客 278

C++知识要点整理07:友元

1.将普通函数声明为友元函数 class Time { public: .. friend void display(Time &); private" .. int hour; }; .. void display(Time &t){..}     请注意,display是一个在类外定义的且未用类Time作限定的函数,它是非成员函数,不属于任何类。声明了display是T

路上的点滴 1091

c++零基础知识要点整理(6)

c++零基础知识要点整理(6)位与运算符的应用:&(有零为零)(1)奇偶性判断: (位与法)(2)获取一个二进制的后几位(3)将一个二进制数的末几位归零(4)消除末尾连续的1(5)2的幂的判断

2301_81705119的博客 535

C++知识要点整理09:运算符重载

1.运算符重载 一般格式为: 函数类型 operator 运算符名称(形参表) { 对运算符的重载处理 } 运算符被重载后,其原有的功能仍然保留,没有丧失或改变。那么,同一个运算符可以代表不同的功能,编译系统是怎样判别该执行哪一个功能呢?是根据表达式的上下文决定的,即根据运算符两侧(如果是单目运算符则为一侧)的数据类型决定的。 2.重载运算符的规则 (1)C++不允许用户自己定义新

路上的点滴 1107

C++知识要点整理05:常对象 常引用

1.常对象    可以在定义对象时加关键字const,指定对象为常对象。常对象必须要有初值。如:Time const t(12,23);这样,在t的生命周期      中,对象t的所有数据成员的值都不能被修改(常对象中的成员函数不是常成员函数,只保证其数据成员是常数据成员,值不被修    改)。定义常对象的一般形式为:   类名 const 对象名[(实参表)];或 const 类名 对象名[

路上的点滴 1618

c++零基础知识要点整理(7)

c++零基础知识要点整理(7)位或运算符的应用: | (有1即1)1.设置标记位(使某一个位置的值变为1)2.置空标记位(使某一个位置的值变为0)3.使低位连续的0变为1 异或运算符的应用:^ (相同为0,不同为1)1.标记位取反(使指定位置取反)2.变量交换(交换两个变量的值)

2301_81705119的博客 437
上一篇: 多线程中定时器的使用
下一篇: 超强指针深入刨析
xyk_code
博客等级 码龄15年 3粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值