● C++的圆括号运算符()

下列关于圆括号运算符的功能说法不正确的是(C) 。

A. 可用于强制类型转换

B 可用于类型构造

C 可用于类型声明

D 可用于函数调用

对大部分可重载的运算符来说,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数

 

一些运算符(如下标运算符[],函数调用运算符(),赋值运算符=等)只能重载为成员函数,而左操作数为std::cout或std::cin的输入输出运算符只能重载为非成员函数。

#include <iostream>

using namespace std;

 

class MyClass {

    int x, y, z;

public:

    MyClass() {

        x = y = z = 0;

    }

    MyClass(int i, int j, int k) {

        x = i;

        y = j;

        z = k;

    }

    MyClass operator()(int a, int b, int c);

    void show() ;

};

 

// Overload ().

MyClass MyClass::operator()(int a, int b, int c)

{

    MyClass temp;

    

    temp.x = x + a;

    temp.y = y + b;

    temp.z = z + c;

    

    return temp;

}

 

void MyClass::show()

{

    cout << x << ", ";

    cout << y << ", ";

    cout << z << endl;

}

 

int main()

{

    MyClass object1(1, 2, 3), object2;

    

    object2 = object1(10, 11, 12); // invoke operator()

    

    cout << "object1: ";

    object1.show();

    

    cout << "object2: ";

    object2.show();

    

    return 0;

}

 

 

● 常成员函数

普通对象可以调用常成员函数和普通成员函数.

常对象只能调用常成员函数.

 

普通成员函数和常成员函数只可以读取常数据成员(只读), 而不能修改它.

 

常成员函数不更新对象(常对象/普通对象)的数据成员.

调用常成员函数的对象(常对象/普通对象)都被视为常对象.

 

常成员函数不能调用普通成员函数.

 

 

shallow copy(浅拷贝):

默认的复制构造函数实现的是浅拷贝.

浅拷贝只是简单地复制指向数据的指针,并不复制数据本身。

The default copy constructor realizes shallow copy,

Shallow copy just simply copies the pointers that point to data, and doesn't copy the data.

 

deep copy(深拷贝):

我们可以自己写一个复制构造函数来实现深拷贝, 该拷贝构造函数不仅可以实现原对象和新对象之间数据成员的拷贝,而且可以为新的对象分配单独的内存资源。

不仅复制指针,并且复制指针指向数据的本身。

We can write a copy constructor by ourselves to realize deep copy, which can not only realize the cloning of an original object to get a new one, but also allocate memory space for the new object.

 

何时用深拷贝?

When to use deep copy?

当类中有指针类型数据成员时.

When there are pointer type data members in the class.

Deep copy vs Shallow copy:

Deep Copy copies all the dynamically allocated members properly to destination.

Deep copy is safe and prevents memory corruptions or memory overwriting.

When dealing with string, list, vectors, or any other dynamically allocated members deep copy is mandatory.

 

●Shallow/Deep copies: Java vs. C++

class CatOwner

{

    string name;

    Cat pet;

}

 

Java:

Shallow copy and Deep copy are different

 

C++:

Shallow copy and Deep copy are the same

 

● 一道有关C++引用传递的选择题

程序运行过程中常使用参数在函数(过程)间传递信息,引用调用传递的是实参的(A)?

  1. 地址 B、类型 C、名称 D、值

引用传递传递的是地址, 但是实参的形式就是变量名或对象名, 不是&变量名或&对象名.

 

● virtual方法详解

class Base

{

public:

    virtual void fun(){}

};

 

class Derived: public Base    //使用虚函数,派生类必须是基类公有派生的;

{

public:

    virtual void fun(){} //virtual可以省略

}

 

main

{

    Base *p1=new Base();

    Base *p2=new Derived();

    p1->fun(); //此时, 我们通过基类指针访问基 类的fun()成员函数

    p2->fun(); //此时, 我们通过基类指针访问派生类的fun()成员函数

}

父类是virtual方法 形参表相同 ---> 构成重写/覆盖

父类是virtual方法 形参表不同 ---> 隐藏父类方法

父类不是virtual方法 形参表相同 --->隐藏父类方法

父类不是virtual方法 形参表不同 --->隐藏父类方法

最好不要将虚成员函数声明为public,而是用protected来替换。

使用虚函数,派生类必须是基类公有派生的;

 

● C/C++中的"烫烫烫"和"屯屯屯"

Visual Studio中,未初始化的栈空间用0xCC填充,而未初始化的堆空间用0xCD填充。

而0xCCCC和0xCDCD在中文GB2312编码中分别对应"烫"字和"屯"字。

如果一个字符串没有结束符'\0',输出时就会打印出未初始化的栈或堆空间的内容,这就是大名鼎鼎的"烫烫烫"、"屯屯屯"乱码。

C/C++知识补充 (1)的更多相关文章

  1. Redis基础知识补充及持久化、备份介绍(二)--技术流ken

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...

  2. CRM中QueryDict和模型表知识补充

    CRM中QueryDict和模型表知识补充 1.QueryDict的用法 request.GET的用法:1.在页面上输入:http://127.0.0.1:8000/index/print(reque ...

  3. Android知识补充(Android学习笔记)

    Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...

  4. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  5. SQL语句之 知识补充

    SQL语句之 知识补充 一.存储过程 运用SQL语句,写出一个像函数的模块,这就是存储过程. 需求: 编写存储过程,查询所有员工 -- 创建存储过程(必须要指定结束符号) -- 定义结束符号 DELI ...

  6. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

  7. 4-5 Scrapy知识补充

    FormRequest FormRequest类是专门用来处理HTML表单的,同时对隐藏的表单处理也很方便.适合用来完成登录操作. 类原型:class scrapy.http.FormRequest( ...

  8. Redis基础知识补充及持久化、备份介绍

    Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)–技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis持 ...

  9. 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算

    1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...

  10. 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

随机推荐

  1. qrcode render 二维码扫描读取

    著名的 qrcode 是 zxing https://github.com/zxing/zxing 基于 java, java 真的是轮子多啊... zxing 的 javascript 版本是 ht ...

  2. 手机计算器1+1=2---Appium自动化

    要想计算1+1=2,首先要定位到按钮1,定位方式和selenium类似

  3. python实战小程序之购物车

    # Author:南邮吴亦凡 # 商品列表 product_list = [ ('Iphone',5800), # 逗号一定不可以省略! ('Mac',4800), ('smartphone',400 ...

  4. gooreplacer 很好用

    国内上 StackOverflow, hackernews 之类的站点会慢. 因为页面里有链接指向 google 谷歌, 会被墙. 于是拖累了整个页面的显示. gooreplacer 可以把这些被墙连 ...

  5. Python 编程快速上手 第十七章 操作图像

    前言 在这一章节,讲了关于图像的三个方面的内容: 获得图像的相关信息:例如 RGBA 值,尺寸... 对图像进行编辑操作:例如 旋转,缩放... 在图像上绘制形状:例如 矩形,圆形... [Image ...

  6. VS2008版本引入第三方dll无强签名

    sn.exe 和ilasm.exe 是系统自带程序.如果显示无此命令,可以从“我的电脑”直接搜索. 将dll文件放入目录下,用VS开发人员命令执行以下命令即可.(以Interop.Scripting. ...

  7. WPF——动画

    本文目录 前言 1.线性插值动画 2.关键帧动画 3.路径动画 前言 使用动画,是增强用户体验的一种有效的手段.合理的动画,可以让应用程序的界面看起来更加自然.真实.流畅.舒适,更有效地向用户展现信息 ...

  8. Elasticsearch SQL

    es sql是一个X-pack组件 ,允许对es执行类似sql的查询,可以将Elasticsearch SQL理解为一个编译器,既能理解es,又能理解sql.可以通过利用es,实施大规模实时读取和处理 ...

  9. 【其他】【PL/SQL Developer】【1】解决PL/SQL Developer过期的情况

    正文: 1,开始菜单,搜索regedit,回车打开(即日常搜索电脑安装的软件的地方,regedit就是注册表) 2,按HKEY_CURRENT_USER\Software\Allround Autom ...

  10. Windows下dump文件生成与分析

    一.    生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键—>创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...