进一步探讨类的特征,重点是类设计技术,而不是通用原理。一些特性很容易,一些特性很微妙。

运算符重载

目的是使C++操作更美观,更接近于内置类型的操作。

隐藏了内部的实现机理,并强调了实质。

格式:operator + ()

==========================================

计算时间:一个运算符重载的示例

==========================================

友元

C++类的私有数据成员的访问只能通过类公有成员函数,这种访问方式限制太严格,有时候不需要另一种访问类私有数据成员的方式。

友元:友元函数不是类的成员函数,但是能够访问类的私有数据成员。

之前有个矛盾就是规定非成员函数不能直接访问类的私有数据,但是这会儿却可以,但那只是针对常规非成员函数而言,特殊的非成员函数就可以访问类的私有数据——友元函数

创建友元: 必须将其原型声明放在类声明中,并且在原型声明前加上关键字friend;[j周3]

例:friend Time operator* (double m, const Time & t);

友元函数就是这么特殊,虽然在类中声明,却不是类的成员函数,这是因为加了前缀friend。

编写函数定义:不需要加friend。

友元的理念是否有悖于OOP:

可以把友元看成与类方法一样都是表达类接口的一种方式。

友元的作用:可以用它来反转操作数的顺序;

之前类重载运算符,必须将非类项放在运算符后面,运算符左边的操作数必须是类对象,右边的是其他数;有顺序要求,不能随便调。

Time = Time +1.1 //Time是类

但是写成 Time =1.1 +Time //就不行

==========================================

重载运算符:作为成员函数还是非成员函数

==========================================

再谈重载:一个矢量类

==========================================

类的自动转换和强制类型转换

类型转换包括:强制类型转换和自动类型转换;

要考虑兼容性,不能会报错;C++语言不支持自动转换不兼容的类型;

类的构造函数,可以将某种类型-->类的类型;

Stonewt MyCat;

MyCat =19.6;   //如果构造函数加了explicit,则无法自动转换,explicit用于关闭自动转换特性。如果没有加explicit,则会进行自动转换,自动过程是使用构造函数Stonewt(double)创建一个临时的Stonewt对象,然后将19.6作为初始化值。采用逐成员赋值的方法将该临时对象的内容复制到myCat中。隐式转换。

Mycat =Stonewt(19.6);  //如果有explicit,用这种格式也可转换;

Mycat =(Stonewt)19.6;

//注意,只接受一个参数的构造函数才能成为转换函数。如果构造函数有两个参数,就不能用于类型转换。

class Stonewt

{

private:

enum{Lbs_per_stn = 14};

int stone;

double pds_left;

double pounds;

public:

Stonewt(double lbs);

Stonewt(int stn, double lbs);

Stonewt();

~ Stonewt();

}

转换函数

将类转换成其他类型;

Stonewt wolfe(285.7);

double host = wolfe;

可以这样做,但是不能使用构造函数,构造函数只适合用于将其他类型转换成类的类型。

要使用特殊的C++运算符函数——转换函数

转换函数也是类的成员函数,

特点:

转换函数必须是类方法;

转换函数不能指定返回类型;

转换函数不能有参数;

class Stonewt

{

private:

enum{Lbs_per_stn = 14};

int stone;

double pds_left;

double pounds;

public:

Stonewt(double lbs);

Stonewt(int stn, double lbs);

Stonewt();

~ Stonewt();

operator int() const;  //转换函数

operator double() const;  //转换函数

}

Stonewt::operator int() const

{

return int (pounds + 0.5);

}

Stonewt::operator double() const

{

return pounds;

}

转换函数和友元函数

==========================================

总结

类型转换

友元函数

运算符重载

 

C++_类入门2-使用类的更多相关文章

  1. C++_类入门3-嵌套类

    可以将类B声明在另一个类中.在另一个类A中声明的类B被称为嵌套类(nested class). 类A的成员函数可以创建和使用嵌套类B的对象. 当且仅当声明为公有部分时,才能在类A的外面使用嵌套类.而且 ...

  2. C++_类入门1-对象和类的介绍

    面向对象是(OOP)是特殊的.设计程序的概念性方法:包含以下特性: 抽象: 封装和数据隐藏: 多态: 继承: 代码的可重用性: 为了实现这些特性并且将这些特性组合在一起,C++所做的最重要的改进是提供 ...

  3. Python全栈开发记录_第九篇(面向对象(类)的学习)

    有点时间没更新博客了,今天就开始学习类了,今天主要是面向对象(类),我们知道面向对象的三大特性,那就是封装,继承和多态.内容参考该博客https://www.cnblogs.com/wupeiqi/p ...

  4. 09_Java面向对象_第9天(类、封装)_讲义

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...

  5. 获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录

    获取全局上下文(getApplicationContext)_创建Shared Preference工具类_实现自动登录 ===========================获取全局上下文(getA ...

  6. Object类入门这一篇就够了!

    第三阶段 JAVA常见对象的学习 第一章 常见对象--Object类 引言: 在讲解Object类之前,我们不得不简单的提一下什么是API,先贴一组百度百科的解释: API(Application P ...

  7. Java入门基础(类)

    类 在Java中表示自定义的数据类型,一个class可以是若干基本类型的组合. public class Student { public String id;//学号 public String n ...

  8. 1127: 【入门】A类多?B类多?

    1127: [入门]A类多?B类多? 时间限制: 1 Sec 内存限制: 16 MB 提交: 3537 解决: 2406 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 一个自然数转换 ...

  9. JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务

    JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...

随机推荐

  1. web服务器推送技术

    传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.不能满足很多现实应用的需求,譬如: 监控系统:后台硬件温度.电压发生变化: 即时通信系统:其它用户登录.发送信息: 即时报价系统:后台 ...

  2. hibernate 一对多(级联关系)

    hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hiber ...

  3. 22-Two(公共子序列的个数)

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. Docker学习笔记_安装和使用mysql

    一.系统环境和准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.操作账号:docker 二.安装 1.搜索mysql镜像:docker search mysql 2 ...

  5. Linux pkg-config命令

    一.简介 pkg-config用来检索系统中安装库文件的信息.典型的是用作库的编译和连接. 二.实例 http://blog.chinaunix.net/uid-20595934-id-1918368 ...

  6. p2150 [NOI2015]寿司晚宴

    传送门 分析 我们发现对于大于$\sqrt(n)$的数每个数最多只会包含一个 所以我们把每个数按照大质数的大小从小到大排序 我们知道对于一种大质数只能被同一个人取 所以f1表示被A取,f2表示被B取 ...

  7. Flask框架 之 上下文管理前戏

    偏函数 自动传递参数 import functools def index(a1,a2): return a1 + a2 # 原来的调用方式 # ret = index(1,23) # print(r ...

  8. Mybatis_映射文件_Select

    一.Select元素来定义查询操作 Id:唯一标识符.用来引用这条SQL语句,需要和接口的方法名一致 parameterType:参数类型.可以不传,MyBatis会根据TypeHandler自动推断 ...

  9. hdu 1556 Color the ball(非线段树做法)

    #include<stdio.h> #include<string.h> ]; int main() { int n,i; int a,b; while(scanf(" ...

  10. 手机APP兼容性测试

    兼容性测试方案 兼容性问题 屏幕分辨率兼容性问题 软件(iOS和Android系统版本及不同厂家的定制ROM)兼容性问题 硬件(不同的CPU.内存大小等等)兼容性问题 网络(2G/3G/4G/WIFI ...