c++学习记录(七)

c++学习实践之重载

重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同

c++类中有重载运算符和重载函数

重载函数

声明多个相似但形式参数个数或者类型不同的函数,编译器通过把你所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。
(1)例子

#include<iostream>
using namespace std;
class Num
{
public:
    void print(int a)
    {
        cout << "返回整数:" << a << endl;
    }
    void print(double a)
    {
        cout << "返回浮点数:" << a << endl;
    }
};
int main()
{
    Num num;
    num.print(1);
    num.print(1.11111);
}

(2)分析
Num类中有两个函数名相同但形参类型不同的函数,调用相同函数,输入不同类型数据,编译器会自动选取合适的函数输出结果
(3)结果

重载运算符

重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。大多数的运算符可以重载,以下运算符不可重载。

.成员访问运算符
., ->成员指针访问运算符
::域运算符
sizeof长度运算符
?:条件运算符
# 预处理符号
(1)例子

#include<iostream>
using namespace std;
class Num
{
private:
    int a;
    int b;
    int c;

public:
    void set1(int z)
    {
        a = z;
    }
    void set2(int x)
    {
        b = x;
    }
    void set3(int v)
    {
        c = v;
    }
    void sum()
    {
        cout << "三数积得:" << a * b * c << endl;
    }
    Num operator+(const Num& num2)
    {
        Num num1;
        num1.a = this->a + num2.a;
        num1.b = this->b + num2.b;
        num1.c = this->c + num2.c;
        return num1;
    }
};
int main()
{
    Num num3, num4,num5;
    num3.set1(1);
    num3.set2(2);
    num3.set3(3);

    num4.set1(1);
    num4.set2(2);
    num4.set3(3);

    num3.sum();
    num4.sum();
    num5 = num3 + num4;
    num5.sum();
}

(2)分析
设置重载加法运算符,将两个子类相加,执行操作后,返回一个相加后的子类。
(3)结果

总结:重载将c++变得更加灵活,后续还有很多的重载运算符。

原文地址:https://www.cnblogs.com/trainking-star/p/12275157.html

时间: 2024-11-08 16:28:44

c++学习记录(七)的相关文章

Oracle学习记录 七 继续接六的

下面是转换函数 to_char select to_char(sysdate,'yyyy') from dual; select to_char(sysdate,'fmyyyy-mm-dd') from dual; select to_char(sysdate,'yyyy-mm-dd') from dual; select to_char(sysdate, 'DDD') from dual;    一年中的第几天 select to_char(sysdate, 'DD') from dual; 

Python学习记录七---继承、多态和封装

1.创建类 创建文件 test7.py #! /usr/bin/env python class Person: def setName(self, name): self.name = name def getName(self): return self.name def greet(self): print "hello, world! I am %s."% self.name foo = Person() foo.setName('yilia') foo.getName() f

SpringMVC学习记录(七)--拦截器的使用

SpringMVC的请求如下面这种图所示: 可以看出所有的请求都要通过Dispatherservlet来接收,然后通过Handlermapping来决定使用哪个控制器,再根据ViewResolver来决定返回哪个视图.从流程来看,Handlermapping就是我们可以实现拦截器的第一种方法.另外还有一种是实现WebRequestInterceptor接口,或者继承其子类. 一.实现HandlerInterceptor接口 实现HandlerInterceptor接口或者继承HandlerInt

zeromq学习记录(七)订阅发布消息封装

之前也有提到 使用订阅发布 pub sub模式必须要显示定义ZMQ_SUBSCRIBE 只有以此模式定义的过滤字节开头的消息才会被订阅者收到 如果想收到所有信息 可定义subscriber.setsockopt(ZMQ_SUBSCRIBE, "", 0); 此类过滤器 示例很简单 我将示例代码发布者与订阅者整合到一个工程中 开启两个线程演示 上代码 // psenvpubsub.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h"

TMS320F28035学习记录七

1.一种处理器可以利用其外设(也可以认为是功能模块)去实现某种功能.具有相同功能的外设一般不止一个,如两个串口外设或6个ePWM外设等.但具有相同功能的外设,其寄存器组分配形式往往是很相似的,我们可以用位域结构体共用体结构体的方式去定义一个功能寄存器组类型,然后用这个自定义类型去定义一个外设. 2.定义每一个寄存器的位域结构体类型,然后用这个位域结构体类型结合整型定义一个共用体类型.用这种方式定义一个功能模块的所有寄存器组.最后采用共用体结构体方式定义一个寄存器组类型. 3.位域的定义必须从右往

Python学习记录-2016-11-29

今日学习记录: 心灵鸡汤: 要有合适自己的目标,一个目标一个目标实现,切忌好高骛远: 最好的投资就是投资自己: 实现梦想 学习,学习,再学习: Talk is cheap. 从本身而言,余三十而立之年,从事测试行业7七年有余,一年半华为外包路由器,两年无线wifi测试,一年半网管软件测试,一年自动化测试经理,推行公司自动化测试进程,从开始的TCL,到现在的python,工欲善其事必先利其器,所以自己来学习,总体我认为我的目标是一直前进的,不断变化的,但是方向并没有大的错误,有些累,所以近期有些懈

2014.6.4淘宝学习记录

今天主要认识了小柒.七念.圆影......体会了阿里人自己设计的chrome插件之UData.这是个很牛的插件,用于天猫和淘宝的数据分析,比如用户页面每个部位的点击量,同一IP的点击量,热度的显示,加入收藏夹.支付等数据,通过分析PV,UV,IPV便于他们后期页面的布局设计等.在学习体会的过程中,发现很多网站是内部开放,外部访问不了,体会到阿里巴巴学习内容的丰富性.下午4点多参与了有数的分析讨论会,感受到了团队的力量,每个人在开会期间,一有疑惑可以随时提出,然后进行讨论,各自说出自己的想法和改进

[ZHUAN]Flask学习记录之Flask-SQLAlchemy

From: http://www.cnblogs.com/agmcs/p/4445583.html Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令. Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作. 一.配置Flask-SQLAlchemy 程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALch

Git 学习(七)标签管理

Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支雷同,但分支可以移动,标签不可):创建和删除标签都是瞬间完成的. 本文具体说明 Git 中是如何创建标签及操作标签的. 创建标签 Git 标签的命令很简单,首先简单浏览下方的 Git 命令: git tag