c语言goord函数,C++编程思想学习笔记(一)

本文深入探讨了面向对象编程中的核心概念,包括访问控制符(public, private, protected)、继承关系、多态性以及栈与存储区的区别。重点讲解了继承机制、派生类与基类的关系,以及如何实现代码重用和多态性。同时介绍了C++中的命名空间、友元、指针和引用等特性。
摘要由CSDN通过智能技术生成

访问说明符&继承关系总结

public、private、protected

1. 默认为private

实现重用

面向对象最主要的目的是代码重用,重用最直接的方法是直接使用一个类的对象,即将一个类的对象作为现有类的成员。

组合(聚合)即任意数量的和类型的其他对象组成新类

成员的变化,不会影响到其他现有的代码

1.5 继承:重用接口

父类的变化会影响到继承的派生类

派生类继承了父类的接口,父类的私有成员,派生类是不能访问的,重要的是派生类复制了基类的接口,也就是说,即可以向基类对象发送消息,也可以向派生类发送消息。

派生类继承与基类,可以看成是基类与派生类是相同的类型,因为派生类具有和基类相同的接口。区分派生类和基类的方法:

第一种,简单直接地向派生类添加成员和新的函数,这些函数不是基类接口的一部分;

第二种方法,改变已经存在的基类函数的行为,即重载基类的函数

is-a关系:派生类单纯的继承基类,可以从基类访问派生类

is-like-a关系:派生类添加了新的接口元素,扩展了接口并创建了新类型,派生类依然可以从基类访问,但是新添加的接口是无法访问的

1.6 具有多态性的可互换对象

程序员常常不想把对象看做是一种特殊类型的成员,而是想把它看做基本类型成员,允许不依赖与特殊类型的程序代码。

非OOP编译器产生的函数调用会导致被调用代码的早捆绑;OOP是直到运行时编译器才决定执行代码的地址,即晚捆绑

这种多态性是用关键字virtual声明他希望某个函数具有晚捆绑的灵活性。默认情况下类的成员函数不具有动态捆绑的功能,通过virtual声明的函数,可用于表示相同家族的类具有不同的行为。多态性即是产生不同行为的原因。

栈、静态存储区、动态存储区:静态存储区,程序编译完成后的变量(全局、静态变量)存储的位置,栈,运行过程的局部变量;动态存储区,即堆,动态分配内存,显示分配和释放,C里面使用的malloc和free,C++是new

和delete

2.1.1解释器

解释器——解释器将源代码化成一组动作(可由多组机器指令组成)并立即执行这些动作,例如,BASIC就是一个流行的解释性语言。传统BASIC解释器一次翻译和执行一行。Python解释器是将整个程序转化为某种中间语言,然后由执行速度更快的解释器来执行。

编译器——直接将源代码转化为汇编语言或机器指令。C语言是分别使用编译器编译隔断程序,最后使用链接器将各段程序连接成一个完整的可执行程序。这个过程为分段编译。

编译过程:预处理器——一个简单的处理程序,将定义好的模式代替源码中的模式

编译一般分为两遍:第一,对预处理过的代码进行语法分析

第二遍,有代码生成器遍历语法分析树,将树中的每个节点转化为汇编语言或机器代码。如果代码生成器生成的是汇编语言,那么必须用汇编器对其进行汇编。最终生成目标模块

第一遍与第二遍之间也可以使用代码优化器进行代码优化,生成更短、更快的代码

连接器——把一组目标模块连接为一个可执行程序,操作系统可以装载和运行它。连接器能够搜索lib,lib将一组目标模块包含在一个文件中,lib可以由库管理器(libarian)进行创建和维护。

声明与定义

声明——告诉编译器名字/标识符

定义——在此处建立变量/函数,分配空间

C语言中 int func();声明意味着可以带任意参数,任意数目参数

关键字extern用于声明变量,不定义;

extern也作为函数声明的修饰标识,但是不是必须的

c语言标准头文件

在C++中也可以使用

C++标准输入输出类iostream

C++名字空间:namespace关键字

库或程序中的每一个C++定义集被封装在一个名字空间中

using namespace std;

#include means

#inclued

using namespace std;

C++main函数总是返回int型。

C++类库中有一个专门用于处理正文的string类

#include

using namespace std;

文件读写:

读文件,创建ifstream对象;写文件ofstream对象;

getline读取一行到string对象中,以换行符结束;

string对象是动态分配空间的,不用管理内存分配

标准C++库有标准容器类container,这与STL不是一种。

系统头文件limits.h和float.h中定义了不同的数据类型可能存储数据类型的最大值和最小值

基本类型:int float double char

说明符:long short signed unsigned

指针

int * p,p2,p3;means int *p; int p2,p3;

可以解释为*与标识符结合得更紧密

c与C++指针的作用基本上是一样的,但是c++增加了另外一种给函数传递地址的途径引用“&”,引用于指针的不同之处在于,带引用的函数调用比带指针的函数调用在语法构成上更清晰。

局部变量常被称为自动变量,进入作用域时自动生成,离开作用域是自动消失,默认auto关键字说,一般没必要声明auto

寄存器变量,一种局部变量,关键字register,告诉编辑器尽可能快的存取变量,但是不一定变量会被保存在寄存器中,仅仅是对编译器的暗示。register变量不能得到内存地址,只能作为局部变量,即不能作为全局变量和static变量。

静态变量,static关键字,离开作用域就会消失,再次调用是会重建,创建时重新初始化,static变量在作用域范围之外不可用。

static关键字用于函数和外部全局变量时,表明作用域为文件作用域,即其他文件不可使用。

如果一个变量定义时使用了static关键字,其他文件内再使用extern做声明,也是不会生效的,会产生编译错误。

const由C++采用,并加进标准C中。C中编译器对待const和变量相同,只是内容不能更改。

C++中const必须具有初始值

volatile防止编译器做优化

逗号列表,产生的结果是最右边表达式的结果

标准C++提供了显示的转换语法,替换C风格转换

static_cast

const_cast

reinterpret_cast

dynamic_cast

asm关键字:允许在C++程序中写汇编代码,在汇编程序中经常可以引用C++变量,意味着可以方便地与C++代码通信,使用汇编只是用于比较高效的调整或使用特殊的处理器指令。编写汇编语言时使用的语法依赖于编译器。

enum:C的枚举只是将整数值与名字联系起来,并不提供类型坚持;C++需要进行类型检查

调试技巧

#ifdef

assert();测试()内语句,为假则发出错误信息,并且会返回出错函数和相关信息,#include

protected:继承的类可以访问protected成员,单不能访问private成员

友元类/函数:关键字friend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值