// main.cpp
#include <conio.h>
#include <iostream>
using namespace std;
class Ptr
{
public:
int* a;
Ptr() // 声明不初始化用构造函数
{
a = 0;
}
Ptr(int* p) // 初始化用构造函数
{
this->a = p;
}
Ptr(Ptr& p)
{
this->a = p.a;
}
void operator=(int* p) // 赋值用等号操作符重载
{
this->a = p;
}
void operator=(Ptr& p)
{
this->a = p.a;
}
operator int*() // 隐式类型转换函数
{
return a;
}
};
void main()
{
int i = 10;
Ptr p0; // 调用Ptr()
Ptr p1; // 调用Ptr()
Ptr p2 = &i; // 调用Ptr(int* p)
Ptr p3 = p1; // 调用Ptr(Ptr& p)
p0 = &i; // 调用void operator=(int* p)
p1 = p0; // 调用void operator=(Ptr& p)
getch();
}
从这个短小而恶心的程序中,我们可以看到以下几个容易被忽视的知识点:
1. 要想只声明变量而不进行初始化,最好追加无参数构造函数。
(如果程序中,已经添加了其他形式的构造函数,就必须添加无参数构造函数。)
2. C++中,变量的初始化和赋值两种操作是具有明显区别的。
在变量声明的时候,直接进行赋值的操作算作初始化。例如:
Ptr p = &i;
此时,C++将自动调用参数匹配的构造函数或拷贝构造函数。
在变量声明之后,再对该变量进行赋值操作算作赋值操作。例如:
Ptr p;
p = &i;
此时,C++将自动调用参数匹配的等号(=)操作符重载。
3. 如果想把一个类的对象转换成其他不相干的类型的对象需要追加隐式类型转换函数。
通常来说,如果无参数构造函数,初始化用构造函数和等号操作符重载中任意两个存在追加的必要,
那么,剩下的一个也必须被追加。
分享到:
相关推荐
1.赋值操作符重载的原因 赋值操作符是一个使用频率最高的操作之一,通常情况下它的意义十分明确,就是将两个同类型的变量的值从一端(右端)传到另一端(左端)。但在以下两种情况下,需要对赋值操作符进行重载。 一...
这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义; 2.复制构造函数和重载赋值操作符的调用时机; 3.复制构造函数和重载赋值操作符的实现要点; 4....
C++构造函数_析构函数和赋值操作符学习小结
C++学习教程从零开始(四)——赋值操作符共18页.pdf.zip
(=)赋值操作符 编译器为每个类默认重载了(=)赋值操作符 默认的(=)赋值操作符仅完成浅拷贝 默认的赋值操作符和默认的拷贝构造函数有相同的存在意义 (=)赋值操作符注意事项 首先要判断两个操作数是否相等 返回值...
您可能感兴趣的文章:浅谈c++构造函数问题,初始化和赋值问题详解C++ 拷贝构造函数和赋值运算符详解C++中对构造函数和赋值运算符的复制和移动操作C++中复制构造函数和重载赋值操作符总结深入C++中构造函数、拷贝构造...
在C++中复制控制是一个比较重要的话题,主要包括复制构造函数、重载赋值操作符、析构函数这三部分,这三个函数是一致的,如果需要手动定义了其中了一个,那么另外的两个也需要定义,通常在存在指针或者前期相关操作...
C++操作符 操作符(operator)用于操作数据。操作符进行计算、检查等式、进行赋值、操作变量和进行其它更奇怪的工作。C++中有许多操作符,这里不想列出全部,只列出最常用的操作符,如下表所示。表1.2常用C++操作符...
本文以赋值操作符operator=举例。 派生类中要重定义基类虚函数,要注意参数必须为基类引用类型,否则与基类中虚函数是完全不同的,无法进行预期的动态绑定。 派生类除了重定义基类的虚操作符,还要定义自身的操作符...
10.13章 复制构造函数和赋值操作符 11.13章 析构函数 12.13章 深复制、浅复制 13.13章 管理指针成员 14.14章 重载操作符的定义 15.14章 重载输入输出操作符 16.14章 重载算术操作符 17.14章 重载关系...
(3) 实现拷贝构造函数和赋值操作符; (4) 实现整数类之间的加、减、乘、除操作符及相应复合赋值操作符; (5) 实现==、!=、>、>=、<、操作符; (6) 实现十进制、十六进制、二进制输出整数值;
本篇文章是对C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程进行了总结与分析,需要的朋友参考下
主要介绍了C++语言中的二元运算符和赋值运算符,文中列出了可重载的运算符列表,需要的朋友可以参考下
之后便可声明BigInt类变量,可以直接使用+、+=、-、-=、*、*=、/、/=、%、%=等运算符和==、>、<、>=、等比较操作符和=赋值操作符,提示:初始化后如果不赋初始值,将会无法使用,可以通过empty成员函数查看是否是未...
C++操作符重载 实现效果图: 实例代码: Matrix.h #pragma once #include "vector" #include "iostream" #define rep(i,n) for(int i=1;...i++) //宏定义for循环,精简代码 ... //赋值操作符重载,必须为成员函数
如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。 赋值过程中的类型转换 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行...
操作符的重载有一些规则: 1. 重载操作符必须具有一个类类型或枚举类型操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。... 像赋值一样,复合赋值操作符通常应定义为类的成员。与