C++ 类型运算符重载

掌握C++运算符重载与类型转换的奥秘 本篇博客深入探讨了C++中运算符重载和类型转换的机制。我们通过解析C++的用户定义数据类型操作符,理解了如何使用operator关键字对操作符进行重载,赋予其新的含义。同时,我们也学习了类型转换中一元构造函数和转换运算符的应用,以及它们在类转换中的作用。通过UML类图的学习,我们了解了如何在C++程序中表示类和类之间的关系,特别是在关联、导航性方面的应用。 阅读详情

为什么要使用类型运算符重载?

  1. 当你需要给对象里面的一个数据成员单独赋一个值时;
  2. 当你需要获取成员函数的返回值 或者 获取类中的一个数据成员的值时;
  3. 当你需要从一个对象赋值给另一个不同类的对象时;

类型运算符重载有哪几种形式?

  1. 普通类型 ==> 类类型
  2. 类类型 ==> 普通类型
  3. 类类型A ==> 类类型B

一、普通类型 ==> 类类型

他是一个普通的数据类型转换为类中的一个数据成员,并赋值给他。

需求:

  1. 定义一个Boy类,根据Boy类定义出对象boy1 和 boy2;
  2. 给boy1 里面的 salary 赋值 39000, 给boy2 里面的 name 赋值 “张三”;
  3. 打印结果出来。

代码示例:

Boy.h

#pragma once
#include <iostream>
#include <string>

class Boy {
public:
	Boy(char *name=NULL, int age=0, int salary=0);
	~Boy();

	// 普通类型 ==> 类类型
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy1 和 boy2;
	//2. 给boy1 里面的 salary 赋值 39000, 给boy2 里面的 name 赋值 “张三”;
	//3. 打印结果出来。
	Boy(int salary);
	Boy(const char *name);	// 注意:指针必须使用const类型修饰

	// 输出方法
	std::string description() const;

private:
	char *name;
	int age;
	int salary;
};

Boy.cpp

#include <sstream>
#include "Boy.h"

Boy::Boy(char *name, int age, int salary) {
	if (!name) {
		name = "无名";
	}

	this->name = new char[strlen(name)+1];
	strcpy_s(this->name, strlen(name)+1, name);

	this->age = age;
	this->salary = salary;
}

Boy::~Boy() {
	if (name) {
		delete[] name;
	}
}

Boy::Boy(int salary) {
	char *defaultName = "无名";

	this->name = new char[strlen(defaultName)+1];
	strcpy_s(this->name, strlen(defaultName)+1, defaultName);

	this->age = 0;
	this->salary = salary;
}

Boy::Boy(const char *name) {
	this->name = new char[strlen(name)+1];
	strcpy_s(this->name, strlen(name)+1, name);

	this->age = 0;
	this->salary = 0;
}

std::string Boy::description() const {
	std::stringstream ret;

	ret << "姓名:" << name << "\t年龄:" << age << "\t薪资:" << salary;

	return ret.str();
}

main

#include <iostream>
#include "Boy.h"

// 普通类型 ==> 类类型
// 需求:
//1. 定义一个Boy类,根据Boy类定义出对象boy1 和 boy2;
//2. 给boy1 里面的 salary 赋值 39000, 给boy2 里面的 name 赋值 “张三”;
//3. 打印结果出来。

using namespace std;

int main(void) {
	Boy boy1 = 39000;
	Boy boy2 = "张三";

	cout << boy1.description() << endl;
	cout << boy2.description() << endl;

	system("pause");
	return 0;
}

运行截图:

在这里插入图片描述


二、类类型 ==> 普通类型

他是一个将类类型中的数据成员和方法转化为普通的类型,并赋值给普通的数据变量。

类类型 ==> 普通类型
需求:

  1. 定义一个Boy类,根据Boy类定义出对象boy1(“张三”, 21, 45000);
  2. 定义一个方法score,用于计算张三的(薪资乘以年龄再除以3)并返回;
  3. main函数中定义一个普通的数据成员int类型变量用于获取score方法中的返回数据;
  4. 将boy1对象中的name数据成员赋值给一个普通的数据成员char *name;
  5. 打印结果出来。

代码实例:

Boy.h

#pragma once 
#include <iostream>
#include <string>

class Boy {
public:
	Boy(char *name=NULL, int age=0, int salary=0);
	~Boy();

	// 普通类型 ==> 类类型
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy1 和 boy2;
	//2. 给boy1 里面的 salary 赋值 39000, 给boy2 里面的 name 赋值 “张三”;
	//3. 打印结果出来。
	//Boy(int salary);
	//Boy(const char *name);


	/***************************************************************************/


	// 类类型 ==> 普通类型
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy1("张三", 21, 45000);
	//2. 定义一个方法score,用于计算张三的(薪资乘以年龄再除以3)并返回;
	//3. main函数中定义一个普通的数据成员int类型变量用于获取score方法中的返回数据;
	//4. 将boy1对象中的name数据成员赋值给一个普通的数据成员char *name;
	//5. 打印结果出来

	// 特殊的运算符重载:类型转换函数,不需要写返回类型
	operator int() const;
	operator char *() const;

	int score() const;


	// 输出方法
	std::string description() const;

private:
	char *name;
	int age;
	int salary;
};

Boy.cpp

#include <sstream>
#include "Boy.h"

Boy::Boy(char *name, int age, int salary) {
	if (!name) {
		name = "无名";
	}

	this->name = new char[strlen(name)+1];
	strcpy_s(this->name, strlen(name)+1, name);

	this->age = age;
	this->salary = salary;
}

Boy::~Boy() {
	if (name) {
		delete[] name;
	}
}

// 普通类型 ==> 类类型
//Boy::Boy(int salary) {
//	char *defaultName = "无名";
//
//	this->name = new char[strlen(defaultName)+1];
//	strcpy_s(this->name, strlen(defaultName)+1, defaultName);
//
//	this->age = 0;
//	this->salary = salary;
//}
//
//Boy::Boy(const char *name) {
//	this->name = new char[strlen(name)+1];
//	strcpy_s(this->name, strlen(name)+1, name);
//
//	this->age = 0;
//	this->salary = 0;
//}


/***************************************************************************/


// 类类型 ==> 普通类型
Boy::operator int() const {
	return score();
}

Boy::operator char *() const {
	return name;
}

int Boy::score() const {
	return salary * age / 3;
}



std::string Boy::description() const {
	std::stringstream ret;

	ret << "姓名:" << name << "\t年龄:" << age << "\t薪资:" << salary;

	return ret.str();
}

main

#include <iostream>
#include "Boy.h"

// 类类型 ==> 普通类型
// 需求:
//1. 定义一个Boy类,根据Boy类定义出对象boy1("张三", 21, 45000);
//2. 定义一个方法score,用于计算张三的(薪资乘以年龄再除以3)并返回;
//3. main函数中定义一个普通的数据成员int类型变量用于获取score方法中的返回数据;
//4. 将boy1对象中的name数据成员赋值给一个普通的数据成员char *name;
//5. 打印结果出来。

using namespace std;

int main(void) {
	/*Boy boy1 = 39000;
	Boy boy2 = "张三";

	cout << boy1.description() << endl;
	cout << boy2.description() << endl;*/

	/***************************************************************************/

	Boy boy1("张三", 21, 45000);

	int score = boy1;	// score();
	char *name = boy1;	// "张三"

	cout << "score:" << score << endl;
	cout << "name:" << name << endl;
	cout << boy1.description() << endl;


	system("pause");
	return 0;
}

运行截图:

在这里插入图片描述


三、类类型A ==> 类类型B

他是可以将不同类的对象赋值给另一个类的对象
Boy boy(“张三”, 21, 45000);
Man man = boy;

类类型A ==> 类类型B
需求:

  1. 定义一个Boy类,根据Boy类定义出对象boy(“张三”, 21, 45000);
  2. 定义一个Man类,根据Man类定义出对象man,并将对象boy赋值给man(Man man = boy;);
  3. 打印结果出来。

下面代码中会用到 输出运算符重载 ;如果有不懂的朋友可以点击链接去了解一下,会有详细介绍:
https://blog.youkuaiyun.com/cpp_learner/article/details/104262877

代码示例:

Boy.h

#pragma once 
#include <iostream>
#include <string>

class Man;

class Boy {
public:
	Boy(char *name=NULL, int age=0, int salary=0);
	~Boy();

	// 普通类型 ==> 类类型
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy1 和 boy2;
	//2. 给boy1 里面的 salary 赋值 39000, 给boy2 里面的 name 赋值 “张三”;
	//3. 打印结果出来。
	//Boy(int salary);
	//Boy(const char *name);


	/***************************************************************************/


	// 类类型 ==> 普通类型
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy1("张三", 21, 45000);
	//2. 定义一个方法score,用于计算张三的(薪资乘以年龄再除以3)并返回;
	//3. main函数中定义一个普通的数据成员int类型变量用于获取score方法中的返回数据;
	//4. 将boy1对象中的name数据成员赋值给一个普通的数据成员char *name;
	//5. 打印结果出来

	// 特殊的运算符重载:类型转换函数,不需要写返回类型
	/*operator int() const;
	operator char *() const;

	int score() const;*/


	/***************************************************************************/


	// 类类型A ==> 类类型B
	// 需求:
	//1. 定义一个Boy类,根据Boy类定义出对象boy("张三", 21, 45000);
	//2. 定义一个Man类,根据Man类定义出对象man,并将对象boy赋值给man(Man man = boy;);
	//3. 打印结果出来。

	char *getName() const;
	int getAge() const;
	int getSalary() const;

	// 输出方法
	std::string description() const;

private:
	char *name;
	int age;
	int salary;
};

Boy.cpp

#include <sstream>
#include "Boy.h"

Boy::Boy(char *name, int age, int salary) {
	if (!name) {
		name = "无名";
	}

	this->name = new char[strlen(name)+1];
	strcpy_s(this->name, strlen(name)+1, name);

	this->age = age;
	this->salary = salary;
}

Boy::~Boy() {
	if (name) {
		delete[] name;
	}
}

// 普通类型 ==> 类类型
//Boy::Boy(int salary) {
//	char *defaultName = "无名";
//
//	this->name = new char[strlen(defaultName)+1];
//	strcpy_s(this->name, strlen(defaultName)+1, defaultName);
//
//	this->age = 0;
//	this->salary = salary;
//}
//
//Boy::Boy(const char *name) {
//	this->name = new char[strlen(name)+1];
//	strcpy_s(this->name, strlen(name)+1, name);
//
//	this->age = 0;
//	this->salary = 0;
//}


/***************************************************************************/


// 类类型 ==> 普通类型
//Boy::operator int() const {
//	return score();
//}
//
//Boy::operator char *() const {
//	return name;
//}
//
//int Boy::score() const {
//	return salary * age / 3;
//}


/***************************************************************************/


char *Boy::getName() const {
	return name;
}

int Boy::getAge() const {
	return age;
}

int Boy::getSalary() const {
	return salary;
}



std::string Boy::description() const {
	std::stringstream ret;

	ret << "姓名:" << name << "\t年龄:" << age << "\t薪资:" << salary;

	return ret.str();
}

Man.h

#pragma once
#include <iostream>

using namespace std;

class Boy;

class Man {
public:
	Man(char *name=NULL, int age=0, int salary=0, int coefficient=0);
	
	// 类类型A ==> 类类型B
	Man(const Boy &boy);
	
	~Man(void);

private:
	char *name;
	int age;
	int salary;
	int coefficient;	// 系数

	// 将Man的输出运算符重载定义为友元
	friend ostream &operator<<(ostream &os, Man &man);
};

// 声明Man的输出运算符重载
ostream &operator<<(ostream &os, Man &man);

Man.cpp

#include "Man.h"
#include "Boy.h"

Man::Man(char *name, int age, int salary, int coefficient) {
	if (!name) {
		name = "无名";
	}

	this->name = new char[strlen(name)+1];
	strcpy_s(this->name, strlen(name)+1, name);

	this->age = age;
	this->salary = salary;
	this->coefficient = coefficient;
}


Man::~Man(void) {
	if (name) {
		delete[] name;
	}
}

Man::Man(const Boy &boy) {
	int len = strlen(boy.getName())+1;

	this->name = new char[len];
	strcpy_s(this->name, len, boy.getName());

	this->age = boy.getAge();
	this->salary = boy.getSalary();
	this->coefficient = 0;
}


// Man的输出运算符重载实现
ostream &operator<<(ostream &os, Man &man) {
	os << "姓名:" << man.name << "\t年龄:" << man.age << "\t薪资:" << man.salary << "\t系数:" << man.coefficient;

	return os;
}

main

#include "Boy.h"
#include "Man.h"

// 类类型A ==> 类类型B
// 需求:
//1. 定义一个Boy类,根据Boy类定义出对象boy("张三", 21, 45000);
//2. 定义一个Man类,根据Man类定义出对象man,并将对象boy赋值给man(Man man = boy;);
//3. 打印结果出来。

int main(void) {
	/*Boy boy1 = 39000;
	Boy boy2 = "张三";

	cout << boy1.description() << endl;
	cout << boy2.description() << endl;*/

	/***************************************************************************/

	//Boy boy1("张三", 21, 45000);

	//int score = boy1;	// score();
	//char *name = boy1;	// "张三"

	//cout << "score:" << score << endl;
	//cout << "name:" << name << endl;
	//cout << boy1.description() << endl;


	/***************************************************************************/

	Boy boy("张三", 21, 45000);
	Man man = boy;

	cout << "boy:" << boy.description() << endl;
	cout << "man:" << man << endl;

	system("pause");
	return 0;
}

运行截图:

在这里插入图片描述


总结:
类型运算符重载其实不难,只要区分好三个的区别,记住他们的定义和用法;

  1. 普通类型 ==> 类类型
    定义:
    Boy(int salary);
    Boy(const char *name); // 注意:指针必须使用const类型修饰
    他也可以说是构造函数重载
    当你需要给对象里面的一个数据成员单独赋一个值时;

  2. 类类型 ==> 普通类型
    定义:
    // 特殊的运算符重载:类型转换函数,不需要写返回类型
    operator int() const;
    operator char *() const;
    当你需要获取成员函数的返回值 或者 获取类中的一个数据成员的值时;

  3. 类类型A ==> 类类型B
    定义:
    Man(const Boy &boy);
    当你需要从一个对象赋值给另一个不同类的对象时;

C++中的运算符重载与复杂类型 本篇博客深入探讨了C++编程语言中的运算符重载机制,特别是与复数类型操作相关的应用。文章基于《C++编程语言,第三版》的内容,详细讲解了运算符在命名空间中的使用、复数类型的设计与实现、以及运算符重载在混合模式算术、初始化、复制操作、构造函数和类型转换等方面的应用。文章还讨论了如何通过构造函数和转换来简化函数版本的多样性,以及如何利用辅助函数来提供额外的数学操作和字面量解释。... 阅读详情

相关推荐

ADS仿真设计平行定向耦合器学习笔记

ADS仿真设计平行定向耦合器

qq_36521926的博客 1万+

C++的使用小教程5——类的重载

C++的使用小教程5——类的重载1、类的重载是什么2、函数的重载3、运算符的重载 学习好幸苦。 1、类的重载是什么 C++的重载分为两类,一个是函数的重载,一个是运算符的重载,重载的意思就是允许在一个作用域内对函数或者运算符指定多个定义,以实现不同的功能。 其中函数的重载是,在同一个作用域内,可以声明与定义几个名字相同的函数,但是其形式参数不同(不同包括形式参数类型、多少、顺序等等),但是必须注...

Bubbliiiing的学习小课堂 2217

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2539

14.重载运算与类型转换

重载的运算符由关键字operator和其后要定义的运算符号共同组成,同时包含返回类型、参数列表以及函数体。其参数数量与该运算符作用的运算对象数量一样多。例如,一元运算符有一个参数,二元运算符有两个。除了重载的函数调用运算符operator()之外,其他重载运算符不能包含有默认实参。 当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数数量比运算对象的数量少一个。

EdSheeran的博客 1422

ARM Memory Compiler实战指南:从参数配置到GDSII生成的全流程解析

本文详细解析了ARM Memory Compiler在SRAM设计中的全流程应用,从基础参数配置到GDSII文件生成。涵盖SRAM类型选择、核心参数配置策略、高级优化技巧及TSMC 28nm工艺下的实战案例,帮助IC设计工程师高效实现存储器模块的优化设计。

game4的博客 418

iPhone用户必看:TrollStore巨魔商店在线安装保姆级教程(iOS 14-16.6.1适用)

本文为iOS 14至16.6.1系统的iPhone用户提供了一份详细的TrollStore(巨魔商店)在线安装教程。文章从核心原理、安装前准备讲起,逐步详解了通过Safari浏览器获取安装器、信任企业证书、部署TrollStore及关键后置配置的全过程,并附带了常见问题排错指南,帮助用户安全、高效地实现无需越狱安装第三方应用。

h0i1j2k3l的博客 1995

c++c++使用类(运算符重载)

运算符重载

记录我目之所及的世界 915

Vscode + QT + CMake:高效开发环境搭建全攻略

本文详细介绍了如何搭建Vscode+QT+CMake高效开发环境,涵盖环境安装、配置优化及项目创建全流程。通过整合Vscode的轻量化编辑、QT的跨平台GUI开发以及CMake的现代构建管理,该组合特别适合大型QT项目和跨平台开发团队,能显著提升开发效率。

weixin_30338481的博客 504

C++//重载运算与类型转换

1. 基本概念 函数名格式为 operator+要定义的运算符号 除了重载的函数调用运算符operator()外,其他重载运算符不能含有默认实参。 一般情况下重载的运算符函数参数数量和运算符作用的运算对象数量一样多,且按顺序一一对应。 重载运算符或者是类的成员函数(其实也就保证了一个类类型的参数),或者至少含有一个类类型的参数。也就是说无法重载作用于内置类型的运算符。 可以重载大部分运算符,且只能重载已经存在的运算符,重载的运算符的参数数量,优先级,结合律都和原运算符一样: 不应该重载有求值顺序/短路求值

weixin_43918519的博客 2188

目标检测数据集 第059期-基于yolo标注格式的水果李子检测数据集(含免费分享)

李子作为中国三大水果之一,种植历史超 3000 年,在市场中占据重要地位。传统李子种植、施肥、采摘依赖大量人力,存在资源浪费、产量估算不准、采摘时机难把控等问题。此前,农业领域缺乏针对 “未成熟李子” 的专用数据集,现有水果检测数据集多聚焦于成熟果实(如苹果、柑橘),且未覆盖李子种植的复杂自然场景。在使用该数据集进行学术研究时,应遵守相关的学术规范,引用该数据集的来源,尊重数据集创作者的劳动成果。,用于训练改进型模型,解决李子精准检测的核心痛点。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 772

【2025国赛A题】A题烟幕干扰弹的投放策略思路+代码+论文

【2025国赛A题】A题烟幕干扰弹的投放策略思路+代码+论文

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 866

C++的重载

函数重载:允许在同一作用域内定义多个同名函数,通过不同的参数列表(类型、数量或顺序)进行区分。它提高了代码的灵活性和可读性。运算符重载:允许为运算符赋予新的意义,使其可以操作用户自定义的类型。这使得自定义类型的对象也可以像基本数据类型一样方便地使用运算符。重载是C++语言的重要特性之一,它赋予了开发者在编写代码时更大的灵活性和表达能力。理解和熟练使用重载对于编写高效、可维护的C++代码至关重要。

weixin_44259499的博客 817

C#怼倍福TwinCAT3:ADS协议封装实战(附完整读写源码+避坑清单)

变量名大小写敏感:PLC里定义的是GVL.bStart,你写GVL.BStart绝对读不到;数组访问格式:PLC数组是,C#里读单个元素要写,读整个数组不用写索引;句柄要释放:用创建的句柄,一定要用using包起来,否则会占着资源;PLC必须运行:哪怕变量定义对了,PLC没Run(只是Login)也读不到数据;路由配置:如果上位机和PLC不在一个网段,要在TwinCAT3里添加路由(Router→Edit Routes)。倍福ADS通信其实不难,核心就是“配置对+变量名写对+数据类型匹配”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 950

C++ 重载类型转换运算符

C++ 类型转换运算符 operator data_type () { return xxxx // xxx 即为 data_type 类型, 不需要再定义函数的返回值类型. } 注意: 上述即为类型转换运算符函数的定义模型。 class Complex { private: int value; public: explicit Complex(int i) : value(i) { } operator int () // 将Complex对象直接转为int类型,同时函数

hui2702的专栏 2737

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

cpp——复合类型——函数——运算符重载

cpp——复合类型——函数——运算符重载

mardax的专栏 644

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++类型转换运算符的重载,自增自减运算符的重载

​ C++里面各种各样的运算符都可以拿来重载,虽然不是所有的运算符都可以重载,但是绝大部分都是可以重载的,比方说这个类型转换运算符的重载,自增自减运算符的重载.

wo_ai_luo_的博客 1688

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ 重载强制类型转换运算符

C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator 类型名(),即变成对运算符函数的调用。 对 double 类型强制转换运算符进行了重载。 #include <iostream&...

weixin_45743799的博客 1113

C++重载()(强制类型转换运算符)

在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator 类型名(),即变成对运算符函数的调用。 下面的程序对 double 类型强制转换运算符进行了重载。 #include <iostream> using namespace std; class Complex { doub

qq_40996392的博客 1549

c++函数调用运算符及类型转换运算符重载

0. 前言. 运算符包括以下运算符. 1. 运算符重载语句一般格式: 2. 函数调用运算符: 3. 类型转换运算符: 例如 int(); double(); bool(); 4. 测试代码

hjjdebug的专栏 731

【C++】C++中重载运算符和类型转换

输入输出运算符 输入输出运算符 输入输出运算符 算术和关系运算符 相等运算符 关系运算符 赋值运算符 复合赋值运算符 下标运算符 递增和递减运算符 成员访问运算符 函数调用运算符 lambda是函数对象 标准库定义的函数对象 可调用对象与function 重载函数与function 重载, 类型转换与运算符 类型转换运算符 避免有二义性的类型转换...

weixin_30905981的博客 367

【C++】强制类型转换运算符的重载

在 C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator 类型名(),即变成对运算符函数的调用。 下面的程序对 double 类型强制转换运算符进行了重载。 #include <io...

Erqi Huang的博客 988

[转]C++重载()(强制类型转换运算符)

在C++中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符。类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数。经过适当重载后,(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator 类型名(),即变成对运算符函数的调用。下面的程序对 double 类型强制转换运算符进行了重载。 #include <i...

weixin_34217711的博客 277

嵌入式实时系统时间确定性:中断、任务与抖动三要素解析

在嵌入式实时控制系统中,时间确定性是保障功能安全与控制精度的核心基础。其本质并非单纯依赖高频率时钟,而是由中断响应的可预测性、RTOS任务调度的严格优先级约束,以及端到端抖动的量化管控共同构成。中断作为物理世界与软件的时间锚点,其传播延迟、抢占行为与屏蔽机制直接决定最小时间分辨率;任务调度则需规避时间片轮转、动态内存与浮点运算等非确定性操作;而抖动——尤其是相位抖动——实为系统健康状态的体温计,反映软硬件协同的真实时序质量。本文结合STM32、Zynq等主流平台实战案例,深入剖析中断响应延迟、任务优先级拓扑

weixin_34391445的博客 382

C++重载 强制类型转换运算符

C++强制类型转换运算符的重载

Ape's IT Blog 746

C++类基础10——重载,类型转换,运算符

public:private:我们的SmallInt 类既定义了向类类型的转换,也定义了从类类型向其他类型的转换,si = 4;// 首先将 4 隐式地转换成 SmallInt,然后调用 SmallInt::operatoc=si+3;// 首先将si隐式地转换成int,然后执行整数的加法尽管编译器一次只能执行一个用户定义的类型转换,但是隐式的用户定义类型转换可以置于一个标准(内置)类型转换之前或之后,并与其一起使用。因此,我们可以将任何算术类型传递给SmallInt的构造函数。

2301_80224556的博客 1758
上一篇: C++ 字符串也能做下标?之 [ ] 运算符重载
下一篇: C++ 输入 和 输出 运算符重载
cpp_learners
博客等级 码龄7年 1526粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值