赋值函数(运算符重载)(2)

&1.参数使用引用是为了增加效率,因为如果不是引用,参数为对象则会调用拷贝构造函数
2.函数具有返回值是为了,若有连等赋值,保证其正常赋值
3.判断语句是为了保证不会出现自己给自己赋值的情况
4.返回值为引用是为了提升效率
赋值函数表面看起来只是对象赋值给对象,实际上是=号前的对象调用operator=方法,赋值函数的参数即为
=号后的对象

void main()
{
    ST t(10,20);
    ST t1;
    t1 = t;    //这里原理应该是 t1.operator=(&t)
}

  

//Test1.h
#include<iostream>
using namespace std;
class ST
{
private:
	int a;
	double b;
public:
	ST(int a=0,double b=0):a(a),b(b)
	{
		this->a = a;
		this->b = b;
		cout<<"Object was built. "<<this<<endl;
	}
	ST(const ST &t);//拷贝构造
	ST& operator=(const ST &t);
	~ST()
	{
		cout<<"Object was free. "<<this<<endl;
	}
};

ST::ST(const ST &t)
{
	this->a = t.a;
	this->b = t.b;
	cout<<"Object was copy. "<<this<<endl;
}
//在类外实现方法时:	返回值 类名 ::函数名(参数)
ST& ST::operator=(const ST &t)
{
	if(this != &t)
	{
		this->a = t.a;
		this->b = t.b;
	}
	return *this;
}

  

#include<iostream>
#include"Test1.h"
using namespace std;
void main()
{
	ST t(10,20);
	ST t1;
	t1 = t;
}

  运行结果

原文地址:https://www.cnblogs.com/area-h-p/p/10325403.html

时间: 2024-08-05 16:43:59

赋值函数(运算符重载)(2)的相关文章

Python 多态 对象常用内置函数 运算符重载 对象迭代器 上下文管理

一 多态 1.什么是多态:多态不是一个具体的技术或代码.指的时候多个不同类型对象可以响应同一个方法,产生不同的结果. 2.使用多多态的好处:提高了程序的灵活性,拓展性 3.如何实现:鸭子类型 就是典型的多态 多种不同类型 使用方法一样 4.案例 class Cat(): def bark(self): print("喵喵喵") def run(self): print("四条腿跑!") def sleep(self): print("趴着睡!")

C++ class内的=重载,拷贝赋值函数,重载示例。必须是class内

#include <iostream> // overloading "operator = " inside class // = 是一元操作符.不写,编译器会提供 默认 拷贝赋值函数.可以通过显式“=delete”来禁用默认.对于复杂class的默认=可能会造成问题,请特别注意. ////////////////////////////////////////////////////////// class Rectangle { public: Rectangle(i

类的成员函数(构造、析构、拷贝构造、赋值、运算符重载)的实现

以String类为例实现其成员函数 class String { //友元函数重载运算符 friend ostream& operator<<(ostream &out,String& str); friend istream& operator>>(istream& in, String& str); public: //通用构造函数 String(const char* str) { if(!str) //对m_data加NULL

C++:运算符重载函数之友元运算符重载

5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算符重载函数的语法如下: 在类的内部: friend 函数类型 operator运算符(形参表) { 函数体 } 在类的内部声明,在类外定义: class X{ ... friend 函数类型 operator运算符(形参表): }; 函数类型 X::operator运算符(形参表) { 函数体 }

运算符重载和友元函数

1. 运算符重载 c++允许将运算符重载扩展到用户定义的类型,例如:允许使用+将两个对象相加,编译器将根据操作数的数目和类型决定使用哪种加法定义,重载运算符可以使代码看起来更加自然. 例:计算时间,一个运算符重载的实例: class Time { private: int hours; int minutes; public: Time() {} Time(int hours, int minutes) { this->hours = hours; this->minutes = minute

再看 运算符重载

运算符重载:分为 全局函数重载 和 成员函数重载两种: 1:重载输入输出操作符: 第一版:全局函数重载: // 运算符重载3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <ostream> using namespace std; class Test { public: int i; int j; Test() { i = j = 0; } Test(int

C++运算符重载总结(真的很详细了w(?Д?)w)

C++运算符重载总结(真的很详细了w(?Д?)w) 概述 运算符重载可以使得一些特殊类型参与运算,我是这样理解的. 使用友元形式的运算符重载 //一般形式 class x{ friend 返回类型 operator 运算符(形参表); }; 返回类型 operator 运算符(形参表) {} 双目运算符 所以加减乘除就可以这样来进行声明了 返回类型 operator +(-.*./) (形参表); 单目运算符 如- & ! ++(前),++(后)等.下面以++(后)来进行一个示例: class

第十章 运算符重载

第十章 运算符重载 1.运算符重载的方法 (实质:函数重载) *一般格式: 函数类型名operator 运算符名称(参数表){函数体:} 2.运算符重载的规则 *不允许定义新的运算符 *允许重载的运算符 双目运算符 +(加法)  - (减法)  * (乘法) / (除法)   %(取模) 关系运算符 ==(等于) != (不等)  <   >   <=   >= 逻辑运算符 ||(或)   && (与)  !(非) 单目运算符 + (正)  -(负)   *(指针)

Part8 多态性 8.1运算符重载

1运算符重载的规则C++ 几乎可以重载全部的运算符,而且只能够重载C++中已经有的.不能重载的运算符:".".".*"."::"."?:"重载之后运算符的优先级和结合性都不会改变. 重载的两种形式: 1 重载为类的非静态成员函数: 2 重载为非成员函数. 2双目运算符重载为成员函数 函数类型 operator 运算符(形参) { ...... } 参数个数=原操作数个数-1 (后置++.--除外) 双目运算符重载规则: 如果要

C++语法小记---运算符重载

运算符重载 运算符重载的本质也是对已有功能的扩展 运算符重载的本质就是函数重载,只是函数变成了 operator + 运算符 当成员函数和全局函数对运算符进行重载时,优先调用成员函数 运算符重载为成员函数时,可以少一个参数,调用时,以右参数为参数进行函数调用 不可以重载的运算符: . :: sizeof ?: 运算符重载不改变参数个数,优先级,结合性 例子 成员函数重载 1 #include <iostream> 2 3 using namespace std; 4 5 class Test