c++运算符重载以及一些基本概念

c++primer第四版435

1.赋值( = ), 下标( [ ] ) ,调用 (  ( )  ), 成员訪问箭头 (->)等操作符必须定义为成员,定义为非成员时,编译器报错

2. 像赋值一样。符合赋值操作符通常应定义为类的成员,可是定义为非成员的复合赋值操作符时不会出现编译错误

3.改变对象状态或给定类型紧密联系的其它一些操作符,如自增,自减和解引用,通常应定义为类的成员

4.对称操作,如算术操作符,相等操作符,关系操作符和位操作符。最好定义为普通的非成员函数

不能重载的操作符:

::       .*      .      ? :

基本注意问题:

1.成员变量的初始化顺序仅仅与在声明时的顺序一样,和初始化列表中的顺序无关

2.必须在初始化列表中初始化的情况: 没有默认构造函数的类类型的成员

const类型成员 和 引用类型的成员变量

-->const 类型成员会调用拷贝构造函数 而引用类型不会调用拷贝构造函数

class B;

class A{

friend class B;

public:

A()

{

a_ = 0;

cout << "A()" << endl;

}

A(int a):a_(a)

{

cout << "A(int)" << endl;

}

A(const A &s)

{

a_ = s.a_;

cout << "A &" << endl;

}

private:

int a_;

};

class B : public A

{

public:

B(A &a2, A &a3)

:a2_(a2),

a3_(a3)

{

}

void prin()

{

cout << a2_.a_ << " " << endl;

}

private:

// A a1_;

A &a2_;

const A a3_;

};

int main(int argc, const char *argv[])

{

A a1(4), a2(5), a3(6); //--> A(int) A(int) A(int)

B b(a2, a3);

b.prin();

return 0;

}

-->友元类,能訪问到A类的私有成员

3.c++的两种初始化方式:1.直接初始化:调用构造函数

2.复制初始化:使用=号操作符,会调用到拷贝构造函数

4.当函数形參或者返回值为类类型时,将由复制构造函数进行复制

A a1;

fun(A );  --->调用fun(a)会调用拷贝构造函数,当然最后也会调用析构函数的

5.拷贝构造函数为引用的原因:防止无限调用拷贝构造函数下去。拷贝构造函数传形參值时会调用类型的拷贝构造函数,这样无穷下去

6.深拷贝 浅拷贝  :浅拷贝:对数据成员进行简单的赋值  深拷贝:对于对象中的动态成员,不能简单的赋值,而应该又一次动态分配空间

7.空间  C++对象:先调用基类构造函数,在初始化列表上成员,再调用自己的构造函数  -->析构的时候反过来

8. 重载 覆盖 隐藏的概念

9. 转换构造函数和类型 转换函数的差别。 类型转换函数注意的几点:1.成员函数, 2.不能指定返回类型, 3.不能有參数  -->operator int()   -->函数里面要return 一个同样类型的出来

10.多态性:静态多态性(重载(操作符。 函数))  动态多态性:虚函数

11.:使用指针訪问非虚函数:訪问指针的类型的,

使用指针訪问虚函数时:訪问指针所指对象的类型

--->  引用也是类似的,只是引用一经声明不能改变了

12.触发动态绑定的条件:1.虚函数才干运行动态绑定 2.必须通过基类类型的指针或者引用进行函数调用

13.构造函数不能为虚函数:虚函数实在不同类型的对象产生不同的动作,如今对象还没产生,没有虚函数指针。訪问不到虚函数。

13.动态执行时类型识别(RTTI):typeid    返回指针或者引用所指对象的实际类型

dynamic_cast    将基类的指针或引用安全的转换成派生类型的指针或引用

14.显式转换:reinterpret_cast     强制类型转换-- >类似于c的类型转换

const_cast   转换掉const属性或者加上const属性

static_cast    隐式类型转换,能够自己主动转换的

dynamic_cast   主要用于有虚函数的下行转换

??

时间: 2024-10-12 16:12:22

c++运算符重载以及一些基本概念的相关文章

C++学习26 运算符重载的概念和语法

所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能. 实际上,我们已经在不知不觉中使用了运算符重载.例如,"+"号可以对不同类型(int.float 等)的数据进行加法操作:"<<"既是位移运算符,又可以配合 cout 向控制台输出数据.C++已经对这些运算符进行了重载. C

C++_基础_运算符重载2

内容: (1)只能用成员形式重载的运算符 (2)new/delete操作符的重载 (3)封装和继承的初识 (4)继承的特性 (5)子类及其函数的特性 (6)多重继承和虚继承 1.只能用成员形式重载的运算符(1)[] 下标操作符 (2)() 函数操作符(3)* -> 间接操作符 2.new/delete操作符的重载 注意: 如果需要在调用构造函数之前做一些初始化工作/在调用析构函数之后做一些善后工作,则可以通过new/delete运算符重载的函数来实现 3.封装和继承的初识3.1 概念(1)封装

C++之------运算符重载

①  什么是运算符重载? 何为C++的运算符重载呢? 其实就是运算符给它重新赋予新的含义或者多重含义.让它有另外一种新的功能. 为什么需要运算符重载? 面向对象中为了实现类的多态性,我们就引用了运算符重载 程序中可以利用“+”.“—” 对整数.单精度.双精度以及指针进行加法和减法运算等 例如: 1 int a = 1+2; //对整数加 2 double d = 1.0+2.54; //对双精度加 3 int por[10]; 4 int *p = por; 5 p = p- 1; //对指针减

运算符重载(作为普通函数)

运算符重载---基本概念 C++程序设计 郭炜 刘家瑛 1 #include<iostream> 2 using namespace std; 3 class Complex{ 4 public: 5 double real; 6 double imaginary; 7 Complex(double a=0.0,double b=0.0) : real(a),imaginary(b) {}//初始化 8 ~Complex(){} 9 void print(); 10 }; 11 Complex

运算符重载(二)

在<运算符重载(一)>我们介绍了运算符重载的基本概念,以及基本形式.那么再运算符重载中,参数的传递有什么遵循的原则?返回值的类型又遵循什么原则呢?这些问题都 在这一篇文章中回答. (1)运算符重载函数中的参数个数应该有几个 运算符重载函数的参数个数取决于两个因素.一是运算符是一元运算符还是二元运算符,二是采用友元函数重载还是采用成员函数重载 如果是一元运算符,采用友元函数重载就要有一个参数,采用成员函数重载,就不需要参数(因为成员函数隐式的传递了this指针) 1 class Integer{

Python——运算符重载(1)

运算符重载 关键概念: 1.运算符重载让类拦截常规的Python运算. 2.类可重载所有的Python表达式运算符. 3.类也可重载打印.函数调用.属性点号运算等内置运算. 4.重载使类实例的行为像内置类型. 5.重载是通过特殊名称的类方法来实现的. 运算符重载只是意味着在类方法中拦截内置的操作--当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果. =================================================

Swift教程之运算符重载

原文地址:http://www.raywenderlich.com/80818/operator-overloading-in-swift-tutorial 作者:Corinne Krych  译者:孟祥月 blog:http://blog.csdn.net/mengxiangyue 这篇文章是本人第一次翻译,难免有错误,翻译的时候使用的是txt,所以格式上面有些不太好. 在早前的IOS 8盛宴系列的教程里,你已经了解到,Swift提供了许多强大的.现代的编程特性,比如泛型.函数式编程.一等类型

Python 3 之 运算符重载详解

基础知识 实际上,"运算符重载"只是意味着在类方法中拦截内置的操作--当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果.以下是对重载的关键概念的复习: 运算符重载让类拦截常规的Python运算. 类可重载所有Python表达式运算符 类可以重载打印.函数调用.属性点号运算等内置运算 重载使类实例的行为像内置类型. 重载是通过特殊名称的类方法来实现的. 换句话说,当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Pyt

PKU C++程序设计实习 学习笔记4 运算符重载

第四章 运算符重载 4.1 运算符重载的基本概念 1. 运算符 2. 自定义数据类型与运算符重载 C++提供了数据抽象的手段:用户自己定义数据类型 -- 类 ? 调用类的成员函数->操作它的对象 类的成员函数->操作对象时,很不方便 ? 在数学上,两个复数可以直接进行+/-等运算 Vs. 在C++中,直接将+或-用于复数是不允许的 3. 运算符重载 对抽象数据类型也能够直接使用C++提供的运算符 ? 程序更简洁 ? 代码更容易理解 运算符重载 ? 对已有的运算符赋予多重的含义 ? 使同一运算符