小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Programming language
  4. C/C++
  5. 正文

C++面向对象程序设计课程笔记(第一周)

2018年9月3日 1331点热度 0人点赞 0条评论

一、动态内存分配

1.第一种用法,分配一个变量:

P = new T;

T是任意类型名,P是类型为T*的指针。动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。比如:

int *pn;

pn = new int;

*pn = 5;

2.第二种用法,分配一个数组:

P= new T[N];

T:任意类型名;

P:类型为T*的指针;

N:要分配的数组元素的个数,可以是整型表达式。

动态分配出一片大小为N*sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋给P。

例如:

int *pn;

int i = 5;

pn = new int[i*20];

pn[0]=20;

pn[100] =30;//编译没有问题,运行时导致数组越界,最大下标为99才对

 

new运算符返回值的类型都是T*。

3.用delete运算符释放动态分配的内存

用new动态分配的内存空间,一定要用delete运算符进行释放。

格式如下:

delete 指针;//该指针必须指向new出来的空间

例如:

int *p = new int;

*p = 5;

delete p;

delete p;//异常,一片空间不能被delete多次

用delete释放动态分配的数组,要加“[]”。,格式如下:

delete[] 指针;//该指针必须指向new出来的数组。

如果不加[],那么delete的空间就不会被释放完全。

二、内联函数和重载函数,函数参数缺省值

1.内联函数

函数调用是由时间开销的。如果函数本身只有几条语句,之行很快,而且执行次数较多,那么调用函数产生额外开销比较大,。为了减少函数调用的开销,引入了内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。

内联函数的书写格式:

inline 函数返回值类型 函数名称(参数)

{

函数体;

}

2.函数重载

同java类似,不再累述,根据调用语句中的实参的个数和类型判断应该调用哪个函数。但是若实参的个数和类型一致,只是返回值类型不同,就不是重载,会报错。

3.函数参数缺省值

定义函数的时候可以让最右边的连续若干个参数有缺省值。

三、类和对象的基本概念与用法

结构化程序设计中,函数和其操作的数据结构没有直观联系。

重用:在编写某个程序时,发现其需要的某项功能,在现有的某个程序里已经有了相同或类似的实现,那么自然希望能够将那部分代码抽取出来,在新程序中使用。

在结构化程序设计中,随着程序规模的增大,由于程序大量函数、变量之间的关系错综复杂,要抽取这部分代码,会变得十分困难。

面向对象的程序设计具有:抽象、封装、继承和多态四个基本特点。

例程:

class CRectangle

{

public:

int w,h;

int Area(){

return w*h;

}

int Perimeter(){

return 2*(w+h);

}

void Init(intw_,inth_){

w = w_;

h = h_;

}

};//必须要有分号

在主程序中使用:

int main()

{

int w,h;

CRectangle r;//新建一个类

cin>>w>>h;

r.Init(w,j);;//初始化赋值

cout<<r.Area()<<endl<<r.Perimeter();

return 0;

}

和结构变量一样,对象所占用的内存空间的大小,等于所有成员变量(不包括成员函数)的大小之和。

每个对象各有自己的存储空间,一个对象的某个成员变量被改变了不会影响另一个对象的成员变量。

和结构变量一样,对象之间可以用“=”进行赋值,但不可以运用别的运算符号,除非重载。

第二种使用类的成员变量和成员函数的方法:

指针->成员名。

第一种类似于Java,不说了。

用法3:引用名.成员名

CRectangle r2;

CRectangle & rr =r2;

rr.w=5;

rr.Init(5,4);//rr的值边了,r2的值也变

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: C++ C++慕课 学习笔记
最后更新:2018年9月3日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
新概念英语第二册课本学习笔记整理:Lesson 1 再回陈毅中学 小奥の部落格再度改版 已修:C++语言程序设计(基础篇)【清华大学】[2015-08-31] 初四第一次月考成绩分析 新青年报[New Youth]第四期发布!
标签聚合
高中 linux 学习 Java python学习 算法 leetcode 鸟哥的linux私房菜 Python 生活
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号