c++前缀和后缀++

1,c++规定后缀形式的++操作符有一个int行的参数,被调用时,编译器自动加一个0作为参数给他

2,前缀返回一个reference,后缀返回一个const对象

///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   meffect_item5.h
//  Version     :   0.10
//  Author      :   Ryan Han
//  Date        :   2013/11/18
//  Comment     :  prefix and postfix
//
///////////////////////////////////////////////////////////////////////////////
#ifndef MEFFECT_ITEM5_H
#define    MEFFECT_ITEM5_H
#include <iostream>
using namespace std;

class A{
    friend ostream& operator <<(ostream &os, const A &a);
public:
    A(int initvalue=0, int initstep=1):value(initvalue), step(initstep){}

    //prefix
    A& operator++(){
        cout << "A& operator++() was called" << endl;
        value+=step;
        return *this;
    }

    //postfix
    const A operator++(int){
        cout << "const A operator++(int) was called." << endl;
        const A oldA = *this;
        ++(*this);
        return oldA;
    }
private:
    int value;
    int step;
};

#endif
///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   meffect_item5.cpp
//  Version     :   0.10
//  Author      :   Ryan Han
//  Date        :   2013/11/18
//  Comment     :  prefix and postfix
//
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include "meffect_item5.h"
using namespace std;

ostream& operator<<(ostream &os, const A&a)
{
    return os<<a.value;
}
int main(){
    int i = 5;

    //postfix return a const value
    //i++++;

    //prefix return a reference
    ++++i;

    A a(0,10);
    cout << a++ << endl;
    cout << ++a << endl;
    A b(0,10);
    cout << b.operator++(9) << endl;
    cout << b.operator++() << endl;

    return 0;
}

c++前缀和后缀++,布布扣,bubuko.com

时间: 2024-07-30 10:18:05

c++前缀和后缀++的相关文章

自增、自减运算符的前缀和后缀

试卷中有这么一道题目: 1 2 int a = 4; (++a) += i; 求a的数值,正确答案是10. 如果你认为这道题重点只是考察运算符优先级,可能很容易得到正确的答案. 但是,考虑过为什么下面的代码无法编译么? 自己在笔试时,考虑到了关于表达式作为赋值运算符左值的问题,但是自己确实又对重载"++"操作符的实现机制和函数原型不很了解,就误认为"a++"和"++a"这两种写法都不能作为赋值运算符左值,从而以为这道题出错了,或者故意考察这一点,

递归算法(二)&mdash;&mdash;前缀转后缀

源码:pretopost.cpp #include "stdafx.h" #include <stdio.h> #include <stack> /************************************************************************/ /* 前缀转后缀 */ /************************************************************************

字符串前缀,真前缀,后缀,真后缀,及前缀函数

举个例子,如字符串 ababc 首先,不考虑空字符,所有的前缀有a, ab, aba, abab, ababc,其中真前缀有a, ab, aba, abab 同理可以理解后缀,真前(后)缀就是指不包含自身的前(后)缀 前缀函数next[j]是指某个字符串的最长真后缀同时也是它的前缀的子串长度.不太理解可以看下面的例子 a -> 0 ab -> 0 aba -> 1 abab -> 2 ababc -> 0 前缀函数在字符串的匹配中用的较多,如KMP等.它主要是表明在一次匹配失

中缀、前缀、后缀表达式的转换

中缀表达式:a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e)) 第二步:转换前缀与后缀表达式 前缀(波兰式):把运算符号移动到对应的括号前面 则变成了:-( +(a *(bc)) +(de)) 把括号去掉:-+a*bc+de 前缀式子出现 后缀(逆波兰式):把运算符号移动到对应的括号后面 则变成了:((a(bc)* )+ (de)+ )- 把括号去掉:abc*+de+- 后缀式子出现

POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀

题目链接:点击进入 这个题目要求所有相同的前缀和后缀的长度.我们可以利用KMP算法中next数组的性质,在next[len]这个点不断的失配下去,这样就可以将所有相同的前后缀的长度求出来.还要注意这个中整个串的长度也可以看成是一个合法的解. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=400000+100; char str

将前缀和后缀相同的文件移动到同一个目录的算法设计及C代码实现

一.需求描述 在Linux系统的某几个目录下有一些前缀和后缀相同的文件,编写程序将它们移动到同一个目录下. 例如,有三个源目录FileDir1.FileDir2和FileDir3,里面分别存放有文件File_1.txt.File_2.txt和File_3.txt.由于它们有相同的前缀(File_)和后缀(txt),所以要将这三个文件移动到同一个结果目录(假设为GatherDir)中. 二.算法设计 基于需求,可以采用如图1所示的程序流程: 图1 程序总体流程 三.特殊流程考虑 在编写程序的过程中

中缀、前缀和后缀表达式

我们学习的算法中的表达式有中缀.前缀和后缀之分,到底有什么区别呢? 中缀(INFIX) 中缀表达式(infix expression)可以是单个变量,或两个变量以及中间的操作符. AA + B(A + B) + (C – D) 前缀(PREFIX) 前缀表达式(prefix expression)可以是单个变量,一个操作符,后面跟两个操作数,每个前缀表达式包括一个操作符和两个操作数. A+ A B+ + A B – C D 后缀(POSTFIX) 后缀表达式(postfix expression

关于字符串 “*****AB**C*D*****” 中前缀、后缀和中间 &#39;*&#39; 的处理

一.删除前缀 '*' 1 #include<iostream> 2 #include<cstdio> 3 4 using namespace std; 5 6 //主函数 7 int main() 8 { 9 char chr[20],*b,*p; //字符串缓冲区:字符串头指针:字符串临时指针 10 int chr_num=0,b_num=0; //输入的字符串中字符的个数:输入的字符串中前缀 * 的个数 11 int i; 12 13 //输入 14 cout<<&

POJ 2752 Seek the Name, Seek the Fame(求所有既是前缀又是后缀的子串长度)

题目链接:http://poj.org/problem?id=2752 题意:给你一个字符串,求出所有前缀后缀(既是前缀又是后缀的子串)的长度 思路:首先整个字符串肯定既是前缀又是后缀,为最大的前缀后缀. 假设next[len] = k,也即:s[1,k] = s[len-k+1,len]此时s[1,k]是前缀后缀. 处理完next[len]后跳转到next[k+1],用这种方法可以得到所有的前缀后缀. code: 1 #include <cstdio> 2 #include <cstr