C++学习笔记第一篇
来源:互联网 发布:横截面数据举例 编辑:程序博客网 时间:2024/05/30 22:49
1.1 类与对象
含义:类是一种复杂的自定义数据类型。对象是属于这种数据类型的变量
1.1.1 类的定义与实现
1)定义:
C++将对象的属性抽象为数据成员,将对象的行为抽象为成员函数,并将他们封装在一个类里
class <>
{
private:(只允许被本类的成员函数访问或调用);
public:(本类或其他类);
protected:(本类或派生类);
};
一般而言,数据成员定义为private属性,成员函数定义为public属性,在声明成员时如果省略了访问权限控制符,默认为private。
2)实现
成员函数的定义形式与一般函数的基本相同,但如果在类的外部定义成员函数,必须在成员函数名前加上类名和作用域限定符(::)。
一般将类的定义放在头文件中,实现放在源文件中,main函数放在另一个源文件中。
声明对象后,就可以像引用结构变量一样,利用成员运算符 “." 或指向运算符 "->" 引用对象的公有成员,但注意不能引用对象的非公有成员。
1.1.2 构造函数与析构函数
1)对对象的初始化
在声明对象时,对象需要初始化,即对成员变量的初始化。
在定义类时不能直接对成员变量进行初始化(因为不能确定类中定义和初始化的成员变量属于哪一个对象)。
也不能在声明对象时直接通过赋值运算进行初始化(因为成员变量一般都是私有属性,只允许本类的成员函数访问)。
2)构造函数
构造函数是一种特殊的成员函数,在创建对象时系统自动调用,作用在于:对象被创建时利用初始值去构造函数,使得在省明对象时就能自动地完成对对象的初始化
因此初始化方法除了在调用成员函数时进行赋值运算,一般通过构造函数进行初始化。
3)析构函数
也是一种特殊的成员函数,它是在对象的生存期即将结束时自动调用的,作用:在对象被删除前做一些清理工作和数据保存工作。
注意:
1,构造函数和解析函数不能有返回值,void也不行,而且解析函数没有参数。
2,析构函数调用顺序一般与构造函数相反,因为是在栈中为对象分配内存空间。
3,可以定义多个不同的构造函数但只调用一次,通过函数参数的不同来区别不同的构造函数。
1.1.3 静态成员
1)实力属性和类属性
一般情况下,属于同一个类的不同对象的数据成员所占用的空间是不同的,及数据成员在每一个对象中都有一个备份。因此不同的对象可以具有不同的属性值,这种属性成为实例属性。有些情况下某个数据成员的值对每个对象都是相同的,称为类属性,即静态数据成员。
注意:
1,对于公有静态数据成员,除了可以像一般数据成员那样直接通过对象或在成员函数里访问,还可以用类名加作用域限定符来访问。对于私有和保护属性的,只能在成员函数里访问。
2,静态数据成员不属于任何一个对象,故不可用构造函数进行初始化,必须在类体外进行初始化。
2) 静态成员函数
1,在声明对象前访问静态数据成员必须声明一个静态成员函数,静态成员函数与一个类相关联,而不是一个特定的对象。
2,可以通过对象或在其他成员函数中调用静态成员函数,也可以用类名加::访问。但其只能访问静态成员。
1.1.4 this指针
每个成员函数都隐藏有一个名为this的指针的参数,他是一个特殊的指针,指向调用成员函数的对象。当通过一个对象调用成员函数时,编译器要把对象的地址传给this指针。在成员函数中访问数据成员或调用其它成员函数时不需要指定对象,因为他们都有一个隐藏的this指针确定当前对象。
在一个成员函数中经常需要调用其他非本类的成员函数,而有时需要吧当前对象的地址作为参数传递给被调用函数,这是必须使用this指针。
静态成员函数没有this指针。
1.1.5友元
此处省略,详见p81
1.1.6常对象和常对象成员
1)const常对象
常对象的数据成员的值在对象的整个生存期内不能被改变,必须利用构造函数进行初始化,且以后不能再更新。(但实际还是可以更新)。
2)常成员函数
1,常成员函数中只能调用常成员函数;
2,通过常对象只能调用常成员函数;
3,通过普通对象可以调用常成员函数。
3)常数据成员
任何函数都不能对它进行赋值,其初始值只能通过构造函数获取。
- C语言学习笔记第一篇、内存专题
- c 语言学习 第一篇
- 第一篇学习笔记:《学习计划》
- Hibernate 学习笔记第一篇
- javascript学习笔记(第一篇)
- Dom4j学习笔记--第一篇
- 第一篇 - 敏捷学习笔记
- latex学习笔记第一篇
- hbase学习笔记 第一篇
- AJAX学习笔记【第一篇】
- C++学习笔记第一篇
- js学习笔记第一篇
- 学习笔记第一篇,不喜勿喷
- Gazebo学习笔记--第一篇
- hive学习笔记第一篇
- iOS笔记:第一篇 C语言基础知识
- Objective-C中的类学习第一篇
- 第一篇 : 开始写一些学习笔记
- 校验
- CodeForces 637A Voting for Photos
- CocosGUI---Menu
- Java 实现单例
- A
- C++学习笔记第一篇
- BZOJ 1198: [HNOI2006]军机调度
- (一)一个简单的取物游戏的算法
- CodeForces 637B Chat Order
- 使用ViewGroup实现RecyclerView
- Cocos场景切换和屏幕截取
- cv机枪手opencv3——同时显示多个摄像头
- 感悟
- Openstack Icehouse Spice配置