C++ 中的一些错觉
1.
默认构造函数和不带参数的构造函数之间无联系
默认构造函数是编译器发现类不存在显式构造函数时自动生成的无参数的构造函数。同样,用户可以定义显示的无参数构造函数。
2.
在构造函数、析构函数中调用virtual 函数。并不会得到预期的结果。virtual函数在此时会"丢失"virtual性质。
3.
构造函数无参数的时候
#ifndef UNTITLED2_TEST_H
#define UNTITLED2_TEST_H #include <stdio.h>
class test {
public:
test()
{
printf("call test()\n");
}
test(char c)
{
printf("call test(char)");
}
}; #endif //UNTITLED2_TEST_H
#include "test.h"
int main() {
test t;//申明一个变量
test tt();//声明一个函数。
test tc('c'); //申明一个变量
return ;
}
/Users/like1/CLionProjects/untitled2/cmake-build-debug/untitled2
call test()
call test(char)
Process finished with exit code 0
test t();并不会像test t;调用test::test()构造函数,仅仅是申明了一个函数,返回类型是test,无参数,函数名是t。
4.
test tc = t;
test* t = &tc;
并不会调用operator=(test& t);而是调用test(test& t);
5.
new delete 和 malloc() free() 的行为存在共性,但不等价。
new 和 delete 会在分配内存后调用类的构造函数,析构函数。
6.
test t;
test tt = t;
这样的定义语句不一定正确。
#ifndef UNTITLED2_UN_COPY_ASSIGN_H
#define UNTITLED2_UN_COPY_ASSIGN_H class un_copy_assign {
public:
un_copy_assign();
private:
un_copy_assign(un_copy_assign& c);
un_copy_assign& operator=(un_copy_assign& c);
}; #endif //UNTITLED2_UN_COPY_ASSIGN_H
#ifndef UNTITLED2_TEST_H
#define UNTITLED2_TEST_H #include "un_copy_assign.h"
#include <stdio.h>
class test : public un_copy_assign{
public:
test():un_copy_assign()
{
printf("call test()\n");
}
test(char c):un_copy_assign()
{
printf("call test(char)");
}
}; #endif //UNTITLED2_TEST_H
http://www.cnblogs.com/like1/p/6852528.html
C++ 中的一些错觉的更多相关文章
- CGroup Namspace
CGroup 介绍 CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制.记录.隔离 进程组 (process groups) 所使用的物力资源 (如 cpu ...
- ASP.Net Core开发(踩坑)指南
ASP.NET与ASP.NET Core很类似,但它们之间存在一些细微区别以及ASP.NET Core中新增特性的使用方法,在此之前也写过一篇简单的对比文章ASP.NET MVC应用迁移到ASP.NE ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式
C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...
- (Python OpenGL)【5】平移 PyOpenGL
(Python OpenGL) 原文:http://ogldev.atspace.co.uk/www/tutorial06/tutorial06.html (英文) 下面是我翻译过来的: 背景 在本 ...
- 15、docker
15.0.服务器使用说明: 服务器名称 ip地址 controller-node1 172.16.1.90 15.1.docker介绍: 1.Docker 是一个开源的应用容器引擎,基于 Go 语言 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- Windows中使用OpenBLAS加速R语言计算速度
在使用R的时候会发现R对CPU的利用率并不是很高,反正当我在使用R的时候,无论R做何种运算R的CPU利用率都只有百分子几,这就导致一旦计算量大的时候计算时间非常长,会给人一种错觉(R真的在计算吗?会不 ...
- PHP中的SESSION机制
[转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. c ...
随机推荐
- C++ Primer 5 CH7 类
7.1 定义抽象数据类型 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,定义可以在类的内部或外部.作为接口组成部分的非成员函数的声明和定义都在类的外部. 定义在类内部的函数是 ...
- 关于ARM内核与架构的解释
本文摘自某论坛某位大神的一段回复,经典至极,copy来己用! 只要你玩过ARM内核的芯片,那么关于内核和架构,我想应该或多或少的困惑过你,看了下面的介绍,你应该会清楚很多! 好比你盖房子,刚开始因为水 ...
- JavaScript运算符优先级
图片引用自:http://www.cnblogs.com/xxcanghai/p/5189353.html
- children 和childNodes 的区别
1:childNodes /children相同点:它返回指定元素的子元素集合. 2:区别:children : 它是非标准的,仅返回HTML节点.甚至不返回文本节点.所有浏览器表现一 致. chi ...
- php生成器使用总结
一般我们在迭代一组数据的时候,需要创建一个数据,如果数组很大,则会消耗很大性能,甚至造成内存不足抛出error比如: //Fatal error: Allowed memory size of 134 ...
- HTTP协议介绍
一.什么是HTTP协议呢? 维基百科 写道 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议.HTTP是一个客户端终端 ...
- mysql数据库实操笔记20170418
一.建立商品分类表和价格表: 1.分类表`sankeq``sankeq`CREATE TABLE cs_mysql11(id INT(11) NOT NULL AUTO_INCREMENT,categ ...
- node.js系列:(调试工具)node-inspector调试Node.js应用
如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...
- 秒懂JS对象、构造器函数和原型对象之间的关系
学习JS的过程中,想要掌握面向对象的程序设计风格,对象模型(原型和继承)是其中的重点和难点,拜读了各类经典书籍和各位前辈的技术文章,感觉都太过高深,花费了不少时间才搞明白(个人智商是硬伤/(ㄒoㄒ)/ ...
- iOS WebView你需要的问题答案
一.UIWebView 可以加载和显示某个URL的网页,也可以显示基于HTML的本地网页或部分网页: a. 加载 URL WebView = [[UIWebView alloc] initWithFr ...