c++primer第四版435

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

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

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

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

不能重载的操作符:

::       .*      .      ? :

基本注意问题:

.成员变量的初始化顺序仅仅与在声明时的顺序一样,和初始化列表中的顺序无关
.必须在初始化列表中初始化的情况: 没有默认构造函数的类类型的成员
                                                             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   主要用于有虚函数的下行转换



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

  1. C++学习之路—运算符重载(一)概念、方法及规则

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1    什么是运算符重载 先来说下什么是重载吧 ...

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

    所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Overloading)也是一个道 ...

  3. C++ 运算符重载的基本概念

    01 运算符重载的需求 C++ 预定义的运算符,只能用于基本数据类型的运算:整型.实型.字符型.逻辑型等等,且不能用于对象的运算.但是我们有时候又很需要在对象之间能用运算符,那么这时我们就要重载运算符 ...

  4. PoEduo - C++阶段班【Po学校】-Lesson03-5_运算符重载- 第7天

    PoEduo - Lesson03-5_运算符重载- 第7天 复习前面的知识点 空类会自动生成哪些默认函数 6个默认函数    1  构造  2  析构   3  赋值  4 拷贝构造  5 oper ...

  5. C++中的运算符重载

    首先思考以下几个问题: 1.什么是运算符重载? 2.为什么要重载运算符,它有什么用? 3.可以重载哪些运算符? 4.重载运算符有哪些规则? 一.基本概念 我们在程序中使用各种操作符,比如加(+).赋值 ...

  6. C++学习笔记之运算符重载

    一.运算符重载基本知识 在前面的一篇博文 C++学习笔记之模板(1)——从函数重载到函数模板 中,介绍了函数重载的概念,定义及用法,函数重载(也被称之为函数多态)就是使用户能够定义多个名称相同但特征标 ...

  7. swift:高级运算符(位运算符、溢出运算符、优先级和结合性、运算符重载函数)

    swift:高级运算符 http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和 ...

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

    ①  什么是运算符重载? 何为C++的运算符重载呢? 其实就是运算符给它重新赋予新的含义或者多重含义.让它有另外一种新的功能. 为什么需要运算符重载? 面向对象中为了实现类的多态性,我们就引用了运算符 ...

  9. 04737_C++程序设计_第9章_运算符重载及流类库

    例9.1 完整实现str类的例子. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...

随机推荐

  1. BZOJ4318: OSU! (概率DP)

    题意:一个串 给出每个字符为1的可能性 否则为0 一段连续的1能获得长度的立方的收益 问总收益的期望 题解:设x_i为到第i位时连续的1的期望长度 由i-1递推来的贡献 如果这一位是0没有贡献 如果是 ...

  2. 常量指针(pointer to constant)和指针常量(constant pointer)

    一个指针可以操作两个实体,一个是指针值(即地址),一个是间访值(即指向的实体).于是指针的常量性也分为两种:常量指针(pointer to constant)和指针常量(constant pointe ...

  3. CentOS 6, 编译安装lamp (php-fpm)

    1 整体要求 php-fpm.httpd.mysql三者分别安装在三台虚拟机上: 第一台虚拟主机用于安装Mariadb,第二台虚拟主机安装php-fpm:第三台虚拟主机安装httpd.三台主机安装完之 ...

  4. Python之条件判断

    Python之条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age ...

  5. 第二十节:Scrapy爬虫框架之使用Pipeline存储

    在上两节当中,我们爬取了360图片,但是我们需要将图片下载下来,这将如何下载和存储呢? 下边叙述一下三种情况:1.将图片下载后存储到MongoDB数据库:2.将图片下载后存储在MySQL数据库:3.将 ...

  6. echarts的简单应用之(二)饼图

    接上一篇文章: echarts的简单应用之(一)柱形图:https://www.cnblogs.com/jylee/p/9359363.html 本篇文章讲述饼图,撇过折线图不说,是因为折线图与柱形图 ...

  7. CodeForcesGym 100517H Hentium Scheduling

    Hentium Scheduling Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForc ...

  8. xtu summer individual 5 F - Post Office

    Post Office Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID ...

  9. Codeforces Beta Round #85 (Div. 1 Only) C (状态压缩或是数学?)

    C. Petya and Spiders Little Petya loves training spiders. Petya has a board n × m in size. Each cell ...

  10. AtCoder Grand Contest 020 D - Min Max Repetition

    q<=1000个询问,每次问a,b,c,d:f(a,b)表示含a个A,b个B的字符串中,连续A或连续B最小的串中,字典序最小的一个串,输出这个串的c到d位.a,b<=5e8,d-c+1&l ...