c11 override声明,函数饰词的用法

2023-12-14 23:52

本文主要是介绍c11 override声明,函数饰词的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.override 声明词

无论何时,只要你在派生类中声明了一个函数,而且该函数意在改写基类中的一个虚函数时,请确保你给该函数加上此关键字。

如果函数加上此关键字,则编译发现虚派发时的语法错误会报错提示。

class base
{
public:base(int name) :base_name(name) {}int base_name;virtual void fun()const { std::cout << "base fun"; }};
class wigit //:public base
{
public:public:wigit()=default;wigit(const wigit&&wigit_copy ){this->wigit_name = wigit_copy.wigit_name;this->m_vec = wigit_copy.m_vec;}void fun()const override{//wigit_name = 0;std::cout << "wigit fun";}};

2.函数饰词的用法和一些功能

base& returnvec()&  //以*this为左值时调用此重载函数
    {
        return m_b;
    }

base returnvec()&&  //以*this为右值时调用此重载函数
    {
        return m_b;
    }

注意,饰词也会影响函数的重载

如果使用如下测试代码:auto res = wig.returnvec();则左值对左值,将函数返回的左值赋值给res.

如果使用auto res = wigit::create().returnvec();,则右值对左值,如果没有右值饰词的重载函数,returnvec 函数将被调动的是这个:

base& returnvec()
    {
        return m_b;
    }

,将会将右值对象再进行拷贝一个左值对象返回。其实这个拷贝是多余的,我们完全可以用创建wigit实例函数返回的右值,调动右值饰词,移动构造地来返回资源,(右值饰词返回的右值被用来做base移动构造函数的形参,优先调动移动构造从而不需要额外的拷贝)

class base
{
public:base(int name) :base_name(name) {}base(const base& base_copy){std::cout << "base copy construct";}base (const base &&base_move){std::cout << "base move construct";this->base_name = base_move.base_name;}};
class wigit 
{
public:static wigit create() { return wigit(); }int wigit_name{ 100 };base m_b{100};
public:wigit()=default;wigit(const wigit&&wigit_copy ){this->wigit_name = wigit_copy.wigit_name;this->m_vec = wigit_copy.m_vec;}base& returnvec(){return m_b;}base& returnvec()&{return m_b;}base returnvec()&& //利用饰词控制返回的左值和右值的型别,{					//对*this的左右值类型执行不同的重载函数;return std::move(m_b);}};int main()
{wigit wig;//auto res = wig.returnvec();auto res = wigit::create().returnvec();/*如果是返回右值的成员参数,则不需要进行无畏的拷贝构造(以调动base& returnvec()函数为例,从右值到左值引用会调动base的拷贝构造,),调动base returnvec()&&,从而直接调动base的移动构造,避免了不必要的拷贝。*/return 0;
}

这篇关于c11 override声明,函数饰词的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/494349

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

Unity3D 运动之Move函数和translate

CharacterController.Move 移动 function Move (motion : Vector3) : CollisionFlags Description描述 A more complex move function taking absolute movement deltas. 一个更加复杂的运动函数,每次都绝对运动。 Attempts to

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

这些ES6用法你都会吗?

一 关于取值 取值在程序中非常常见,比如从对象obj中取值 const obj = {a:1b:2c:3d:4} 吐槽: const a = obj.a;const b = obj.b;const c = obj.c;//或者const f = obj.a + obj.b;const g = obj.c + obj.d; 改进:用ES6解构赋值

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^