【北京大学C++程序设计学习】——菜鸟的基础过关——从C走进C++

写在前面

唯一算是有点遗憾的事情吧,当初研一就应该过一遍的,但是一直拖着,每个月学一点,结果到现在就一直原地踏步,这些东西是躲不过的,做好自己吧。

从C走进C++

1. 函数指针
  • 每个函数占用一段连续的内存,函数名就是该函数的起始地址(入口地址),将该入口地址赋给一个 指针变量————————函数指针!

  • 可以通过该指针变量调用这个函数。在这里插入图片描述

在这里插入图片描述

2. 命令行参数

这个太简单,就不说了,就是
在这里插入图片描述

3. 位运算
  • 常见的:
    在这里插入图片描述
4. 引用
  • 引用是对变量的引用
  • 某个变量的引用,等价于这个变量,相当于该变量的一个别名绰号一样!。
  • 而且可以通过引用来改变变量
    在这里插入图片描述
  • 引用还可以作为函数的返回值(至于为什么要这样还是要从后面的学习中知道的):
    可以将函数的调用放在赋值号的左边
    在这里插入图片描述
  • 常引用:定义引用时,前面加const关键字
    在这里插入图片描述
    在这里插入图片描述
5. const关键字和常量

多用const少用define,因为const是有类型的
(1)第一个用法:定义常量(有类型的,便于编译的时候的检查)

(2)第二个用法:定义常量指针,不可通过常量指针修改其指向的内容。指向常量的指针,内容不能通过常量指针来修改!
还有一个:

在这里插入图片描述

6. 动态内存分配(按需分配!)

C语言中:malloc/free运算符
C++语言中:new/delete运算符
具体的二者的区别之前有进行过比较信息的对比和比较,地址malloc/free和new/delete的区别以及联系

C++中的用new
(1)第一种用法:分配一个变量:
在这里插入图片描述
(2)第二种用法:分配一个数组(好大一片内存空间)
在这里插入图片描述
(3)new运算符的返回值类型:
在这里插入图片描述
(4)delete来释放动态分配的内存

  • 回收分配出来的变量的内存。
    在这里插入图片描述
  • 回收分配出来的数组的内存
    在这里插入图片描述
7. 内联函数和重载函数

(1) 内联函数:
调用函数的开销比函数本身执行起来的时间消耗要大得多~
在这里插入图片描述
如何写???
inline卸载函数之前
所以这样做的时候一般都是小函数,不然就得不偿失了!
因为函数体量就变得非常大!关于具体的

(2)函数重载(名字相同,参数表不同!!!!!)
!!!让函数的命名变得简单很多!只是参数表不一样!
在这里插入图片描述

8.函数缺省参数

在这里插入图片描述

  • 可以提高程序的可扩充性等等
9.面向对象程序设计方法

结构化程序设计的四大囧境(大问题->子问题)
在这里插入图片描述

  • 结构化程序设计的直观理解

在这里插入图片描述

  • 面向对象的程序设计方法:
    清晰化,条理化
    在这里插入图片描述
    举个例子就是小黄人!
    在这里插入图片描述

好啦,下面正经严肃一点就是:
在这里插入图片描述

10.面向对象语言的发展历程

讲故事咯~

11.从客观事物抽象出类的例子
  • 变量:成员变量

  • 函数:成员函数
    上面两个统称为类的成员!

  • 对象的内存分配:
    在这里插入图片描述

  • 访问类的成员变量和成员函数 的三种方式!

(1) 对象名.成员名

CRectangle r1, r2;
r1.w = 5;
r2.init(3, 4)

(2)指针->成员名

CRectangle r1, r2;
CRectangle * p1 = & r1;
CRectangle * p2 = & r2;
p1->w = 5;
p2->Init(3,4); //Init作用在p2指向的对象上

(3)引用名.成员名

CRectangle r2;
CRectangle & rr = r2;
rr.w = 5;
rr.Init(3,4); //rr的值变了,r2的值也变
10
  • 类的成员函数的另外一种写法,就是函数体和类的定义分开写,成员函数只在类里面进行申明就好了,比如下面的例子!
class CRectangle
{
public:
int w, h;
int Area(); //成员函数仅在此处声明
int Perimeter() ;
void Init( int w_, int h_ );
};

int CRectangle::Area() {//注意这里的双冒号,这样的标记就是用来告诉我们是类的成员函数的!
return w * h;
}
int CRectangle::Perimeter() {
return 2 * ( w + h );
}
void CRectangle::Init( int w_, int h_ ) {
w = w_; h = h_;
} 

然后这些调用的方法还是一样,还是上面介绍到的三种方法!

12.类成员的可访问范围

主要讲的就是private, public, 以及protected这三个啦~~
值得了解的是这三个关键字出现的次数以及先后顺序是没有什么限制的!!!很自由哦~
在这里插入图片描述
如果没有写出来是哪一种,那就是缺省为私有成员!!!
在这里插入图片描述

  • 还是访问权限的问题:
    (1)类的成员函数内部, 可以访问:
    •当前对象的全部属性, 函数
    •同类其它对象的全部属性, 函数
    (2)类的成员函数以外的地方,
    •只能够访问该类对象的公有成员
    还是看一个例子来理解!
class CEmployee {
	private:
		char szName[30]; //名字
	public :
		int salary; //工资
		void setName(char * name);
		void getName(char * name);
		void averageSalary(CEmployee e1,CEmployee e2);
};
void CEmployee::setName( char * name) {
	strcpy( szName, name); //ok
}
void CEmployee::getName( char * name) {
	strcpy( name, szName); //ok
}
void CEmployee::averageSalary(CEmployee e1,CEmployee e2){
	salary = (e1.salary + e2.salary )/2;
}
int main(){
	CEmployee e;
	strcpy(e.szName,"Tom1234567889"); //**编译错, 不能访问私有成员**
	e.setName( "Tom"); // ok
	e.salary = 5000; //ok
	return 0;
}

•设置私有成员的目的
•强制对成员变量的访问一定要通过成员函数进行
•设置私有成员的机制 – 隐藏,极大程度的可以避免程序出错!
比如下面的例子:

szName 的大小变为 char szName[5] 
(1)如果szName不是私有, 需要修改全部:
		strcpy(man1.szName, “Tom1234567889”); 
(2)如果将szName变为私有,所有对 szName的访问都是通过成员函数来进行,
		man1.setName( “Tom12345678909887”);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值