// 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. 如果想把一个类的对象转换成其他不相干的类型的对象需要追加隐式类型转换函数。
通常来说,如果无参数构造函数,初始化用构造函数和等号操作符重载中任意两个存在追加的必要,
那么,剩下的一个也必须被追加。
分享到:
相关推荐
C++赋值操作符重载详解 C++赋值操作符重载是一种常用的技术,它允许开发者根据需要重载赋值操作符,以实现自定义的赋值行为。在本文中,我们将详细介绍C++赋值操作符重载的相关知识,包括赋值操作符重载的原因、...
在C++编程语言中,赋值操作符是学习过程中至关重要的一部分。本教程“C++学习教程从零开始(四)——赋值操作符”旨在帮助初学者深入理解这一概念,以便能够有效地使用它们来操控变量和数据。在这个18页的PDF教程中...
C++构造函数、析构函数和赋值操作符学习小结 C++ 构造函数、析构函数和赋值操作符是 C++ 编程语言中的基本组件,它们提供了对象的初始化、销毁和赋值操作。这些函数的正确性对整个类的正确性至关重要。 构造函数 ...
1. **赋值操作符**(=):在自定义类中,通常需要重载赋值操作符以确保深拷贝或浅拷贝的正确处理。遵循"拷贝赋值运算符的五个原则"(也称为“rule of five”),包括赋值、构造、移动赋值、移动构造和析构函数。 2....
这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义; 2.复制构造函数和重载赋值操作符的调用时机; 3.复制构造函数和重载赋值操作符的实现要点; 4....
7. 赋值操作符:=、*=、/=、%=、+=、-=、、>>=、&=、^=、|= 8. 条件操作符:?: 9. 逗号操作符:, 结合性 C++操作符的结合性指的是在多个操作符同时出现时,它们的执行顺序。C++语言中,操作符的结合性有两种: *...
C++还提供了复合赋值操作符,如 `+=`、`-=`、`*=`、`/=` 和 `%=`,它们结合了赋值和算术操作,如 `a += b` 相当于 `a = a + b`。 三、比较操作符 比较操作符用于比较两个值,并返回一个布尔结果。这些操作符包括...
总结来说,复制构造函数和重载赋值操作符在C++中扮演着至关重要的角色,它们确保了对象复制和赋值的正确性和效率,尤其是在涉及动态内存分配和多态性时。对于包含复杂数据结构或需要管理资源的类,程序员必须理解和...
(=)赋值操作符 编译器为每个类默认重载了(=)赋值操作符 默认的(=)赋值操作符仅完成浅拷贝 默认的赋值操作符和默认的拷贝构造函数有相同的存在意义 (=)赋值操作符注意事项 首先要判断两个操作数是否相等 返回值...
您可能感兴趣的文章:浅谈c++构造函数问题,初始化和赋值问题详解C++ 拷贝构造函数和赋值运算符详解C++中对构造函数和赋值运算符的复制和移动操作C++中复制构造函数和重载赋值操作符总结深入C++中构造函数、拷贝构造...
1. **成员/非成员选择** 变量赋值操作符(如`+=`)应为成员函数,而返回新对象的操作符(如`+`)应为非成员函数,利用`+=`实现。 2. **类型转换** 非成员函数可以在左操作数上进行类型转换,如有需要应使用非成员...
2. 赋值操作符:`=` 3. 流输入输出操作符:`和`>>` 4. 比较操作符:`==`、`!=`、`、`>`、`、`>=` 5. 数学运算符:`+`、`-`、`*`、`/`、`%` 五、实际编程中的应用 操作符重载使得代码更加直观和简洁,提高了程序的...
### C/C++操作符优先级记忆法 在学习C/C++编程语言的过程中,掌握操作符的优先级是非常重要的。操作符优先级决定了表达式中不同操作的执行顺序,直接影响到程序的逻辑处理结果。本文旨在提供一套高效的记忆方法,...
C++中的操作符是编程语言的关键组成部分,它们用于执行各种计算和逻辑操作。操作符的优先级和结合性是理解程序行为的关键因素。优先级决定了哪个运算先进行,而结合性规定了当多个相同优先级的操作符连续出现时,...
9. **赋值操作符** (=, +=, -=, *=, /=, %=, &=, ^=, |=, , >>=) - `=` 直接赋值,如 `i = 42` - `+=` 加法赋值,如 `i += 1` - `-=` 减法赋值,如 `i -= 1` - `*=` 乘法赋值,如 `i *= 2` - `/=` 除法赋值,如...
在C++编程中,拷贝构造函数和赋值操作符重载是两个非常重要的概念,尤其是在处理包含动态分配资源的对象时。拷贝构造函数和赋值操作符是保证对象正确复制和赋值的关键。 拷贝构造函数是一种特殊的构造函数,其主要...