c++编程思想(四)--对象和隐藏(感觉书上有误)
c++编程思想里数据抽象和隐藏实现实际就是通常所说的类和封装;
封装,继承,多态对象特点说的很多,就不再说了
关于封装,本人觉得书上有个地方写的有问题,p145和p153都提到Y::f(X*)引用了X对象的地址,编译器只需要知道如何传递一个地址,而不需要知道实际对象大小结构(实际上传地址不知道实际对象大小结构也是不能调用的,知道实际对象大小直接Y::f(X)也一样)。然而试图传递整个对象,编译器必须知道对象大小,以及如何传递,无法直接申明 Y::g(X) 的函数(实际也可以),看下面例子
如上所述,是能编译通过且运行的,也就是不知道实际对象大小结构时候,也可以申请的,只是下面调用会出问题,报错
这样即使换成
void Y::f(X *x)
{
x->a = 5;
}也会报错,
也就是知道申明对象之后,下面如果引用 对象和对象地址 都可以
知道对象结构之后,通过对象和对象地址使用对象都是可以的,不知道对象大小结构之后通过对象和对象地址使用对象都是非法的
因此实验发现 引用实际对象和对象地址并没有区别
并且发现其他易犯的错误:
1、(对象)函数申明完之后,就可以使用,哪怕实际定义在调用下面也可以,但是用到对象里变量(实际内存)时,必须知道对象实际大小和结构
2、c++的类有默认构造函数,但是并不是所有的,是要满足一定条件的,上面的例子如果注释掉x的构造函数就会报错,所以简易创建类的时候自己要加构造函数
上面写的都很白话。因为自己现在对于原理也不是很精通,都是通过编写简单的例子发现的。。如有不对,欢迎告之
c++编程思想(四)--对象和隐藏(感觉书上有误)的更多相关文章
- Java编程思想(四) —— 复用类
看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...
- JS基础语法---编程思想和对象
编程思想: 把一些生活中做事的经验融入到程序中 面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程 面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果 面向对象特性: 封装, ...
- python编程思想及对象与类
目录 编程思想 面向对象 面向过程 对象与类的概念 对象与类的创建 对象的实例化方法-独有数据 编程思想 1.面向对象 1.1. 面向对象前戏 案例:人狗大战 # 需求:人狗大战# 1.'创造'出人和 ...
- 《java编程思想》对象导论
1.抽象过程 所有编程语言都提供抽象机制.可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量,所谓的'类型'是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象. java的基本 特性 ...
- java编程思想,对象导论
程序设计的本质就是使用编程语言解决某一类具体问题.对问题的定义叫建模,例如定义问题域中的各种名词,动作,结果等.针对具体的问题提出的解决方案叫算法. 面向对象程序设计的挑战之一,就是在问题空间的元素和 ...
- JavaScript面向对象编程指南(四) 对象
第4章 对象 4.1 从数组到对象 对象的组成:变量名.{}.用逗号分割的属性.用冒号分割的键/值对. var f={ name:'alen', // 可以在属性名上加引号 age:12 }; 对象文 ...
- Java并发编程(四)锁的使用(上)
锁的作用 锁是一种线程同步机制,用于实现互斥,当线程占用一个对象锁的时候,其它线程如果也想使用这个对象锁就需要排队.如果不使用对象锁,不同的线程同时操作一个变量的时候,有可能导致错误.让我们做一个测试 ...
- Java编程思想学习(一)----对象导论中多态的理解
1.1抽象过程 1)万物皆对象. 2)程序是对象的集合,他们通过发送消息来告知彼此所要求做的. 3)每个对象都有自己的由其他对象所构成的存储. 4)每个对象都拥有其类型. 5)某一特定类型的所有对象都 ...
- MyEclipse导入ant项目——Java编程思想
北门煎饼东门串儿: <JAVA编程思想(Think in Java)>一书中提供了大量源代码,可是项目是用ant构建的.对于用惯了eclipse,netbeans等IDE的同学们可能有些手 ...
随机推荐
- 深度学习caffe:Ubuntu16.04安装指南(1)
caffe [CPU ONLY] 2017-01-15 最简单的安装配置方式: 不用GPU加速,使用OPENCV2.4图像库, 这是根据官方教程(链接如下)简化而得到. Ubuntu 16.04 or ...
- Object修改链表
以前学习过链表的时候由于类型的接收不同,每次要重写链表 下面修改可用链表 class Link{ private class Node{ private Object data ; private N ...
- java8 泛型声明 The diamond operator ("<>") should be used
The diamond operator ("<>") should be used Java 7 introduced the diamond operator (& ...
- UVa 11631 - Dark roads
题目大意:政府为了减小开支决定关闭一些路灯,同时保证照亮的路能连接所有路口. 又是一个MST问题,Kruskal算法,不过数据规模比较大,又Submission Error了...扔这吧... #in ...
- centos 6.5中安装hadoop2.2
1.配置集群机器之间ssh免密码登录 (1) ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 将id_dsa.pub 公钥 加入授权的key中去 这条命令的功能是把公 ...
- hashchange
<!DOCTYPE html> <html> <head> <title>Hash Change Example</title> <s ...
- DEV组件LookupEdit,ComboBoxEdit绑定数据源
LookupEdit可以绑定数据表(DataTable)或对象数据组(Object List)作为数据源,下拉窗体可自定显示栏位. 绑定数据源需要设置三个参数:DisplayMember ,Value ...
- Java 字符终端上获取输入三种方式
http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in ...
- 微信LazyMan笔试题的深入解析和实现
一.题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank! ...
- spring-mvc.xml配置
1.自动扫描 <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-pac ...