指针与C++的基本原理

很多新手程序员不会在意原理,但是作为一名程序员必须要知道原理。

颜笑Qq:877451122

面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时。运行阶段决策就好比度假时。选择参观的那些景点取决于天气和心情;而编译阶段决策更像不管在什么条件下,都坚持预先设定的日程安排。

运行阶段决策提供了灵活性,可以根据当时的情况进行调整。例如,考虑为数组分配内存的情况。传统的方法是声明一个数组。要在C中声明数组,必须指定数组的长度。因此数组长度在程序编译时就设定好了;这就是编译阶段决策。读者可能认为,在80%的情况下,一个包含20个元素的数组足够了,但程序有时需要处理200个元素。为了安全起见,使用了一个包含200个元素的数组。这样,程序在大多数情况下都浪费了内存。OOP通过将这样的决策推迟到运行阶段进行,使程序更灵活。在程序运行后,可以告诉它只需要20个元素,而还可以下次告诉它需要205个元素。

总之,使用OOP时,程序员可能在运行阶段确定数组的长度。为使用这种方法,语言必须允许在程序运行时创建数组。稍后程序员会看到C采用的方法是,使用关键字new请求正确数量的内存以及使用指针来跟踪分配的内存的位置。

时间: 2024-11-05 18:49:04

指针与C++的基本原理的相关文章

C/C++之学习笔记

[C语言的Static inline 函数的作用] [printf打印格式] %x  打印十六进制 %d 打印十进制 %b 打印二进制 %c 打印字符 %s 打印字符串 %f 打印单精度float %lf 打印双精度double [关于C++中的类型转换] dynamic_cast: 通常在基类和派生类之间转换时使用,把一个派生类转换为基类使用这个转换,run-time cast const_cast: 转换是去掉const变量的const, 主要针对const和volatile的转换. sta

指针与C++基本原理

面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策.运行阶段指的是程序正在运行时,编译阶段指的是编译器将程序组合起来时.运行阶段决策就好比度假时,选择参观那些景点取决于天气和当时的心情:而编译阶段决策更像不管在什么条件下,都坚持预先设定的日程安排.运行阶段决策提供了灵活性,可以根据当时的情况进行调整.例如,考虑为数组分配内存的情况.传统的方法是声明一个数组.要在C+中声明数组,必须指定数组的长度.因此,数组长度在程序编译时就设定好了:这就是编辑阶段决策.

【转载】C/C++杂记:虚函数的实现的基本原理

原文:C/C++杂记:虚函数的实现的基本原理 1. 概述 简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针.例: 其中: B的虚函数表中存放着B::foo和B::bar两个函数指针. D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)了基类虚函数B::bar的D::bar,还有新增的虚函数D::quz. 提示:为了描述方便,本文在探讨对象内存布局时,将忽略内存对齐对布局的影响.

Learning ReactNative (一) : JavaScript模块基本原理与用法

在使用ReactNative进行开发的时候,我们的工程是模块化进行组织的.在npmjs.com几十万个库中,大部分都是遵循着CommonJS规则的.在ES6中引入了class的概念,从此JavaScript也可以更加方便地进行OOP编程.但是不变的是,即使在使用OOP编程,其依赖组织方式仍然是模块化的.因此,我们十分有必要了解JavaScript中模块的基本原理,以便在之后的开发过程中能少犯错误,更好的理解整个工程的结构. 本文以更容易理解的意识流的方式简要的介绍了一下require.js.mo

指针知识梳理5-字符串与指针,程序内存总结

一.文字常量区域 #include <stdio.h> int main() { char *p = "hello"; int i = 0; for(i = 0;i<6;i++) { printf("%c",*(p+i)); } *p = '1'; } 大家分析验证以上代码.p 是一个指针变量,存储地址,"hello"是一个字符串占6个字节,当我们用printf的时候可以输出"hello",我们得出结论,p存

DNS基本原理

首先来看DNS中常用的2种查询模式 1.递归查询: 一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机: 2.迭代查询(反复查询):  一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求: DNS域名解析过程 主机向本地域名服务器的查询采用递归查询: 主机向本地域名服务器的查询一般都是采用递归查询.如果主机所询

Boost智能指针-基础篇

简介 内存管理一直是 C++ 一个比较繁琐的问题,而智能指针却可以很好的解决这个问题,在初始化时就已经预定了删除,排解了后顾之忧.1998年修订的第一版C++标准只提供了一种智能指针:std::auto_ptr(现以废弃),它基本上就像是个普通的指针:通过地址来访问一个动态分配的对象.std::auto_ptr之所以被看作是智能指针,是因为它会在析构的时候调用delete操作符来自动释放所包含的对象.当然这要求在初始化的时候,传给它一个由new操作符返回的对象的地址.既然std::auto_pt

关于垃圾回收的一些基本原理及技术解析

关于垃圾回收的一些基本原理及技术解析 什么是垃圾,为什么要垃圾回收? 垃圾回收是很大一块,在java虚拟机一些资料描述中,jvm大致干三件大事儿,1>加载class 2>分配存储空间 3>执行垃圾回收:可见垃圾回收在高级语言中所占的分量.(不好意思,扯远了~),简单点儿说就是:在程序运行时刻,产生的一直未能删除的或不能被引用的对象数据称之为垃圾,如果一直未能通过有效的方式回收会导致内存泄露(通俗点就是内存撑爆了). 关于人工回收的一些问题: 在C或C++语言中,程序员可显示地安排数据回收

autorelease方法和ARC基本原理

一.autorelease方法 又叫做半自动释放 1.调用方式--[对象变量  autorelease]他会返回对象本身,并且会将对象放到一个自动释放池(自动释放池也是个对象) 2.方法运行原理:当自动释放池被销毁时,会对池子里面的所有对象做一次release操作 [email protected]{}->这个就是自动释放池,要把代码写进大括号里面. 4.autorelease的使用注意: *自动释放池可以创建无数个 *调用完autorelease方法后,对象计数器不变 *占用内存较大的对象不要