类和对象的学习总结

一、类的定义
遵循一般的命名规则; 字母,数字和下划线组合,不要以数字开头。
1.class 类名{
访问范围说明符:
成员变量1
成员变量2
成员函数声明1
成员函数声明2
访问范围说明符:
更多成员变量
更多成员函数声明

};
※ “}”后面以“;”结束。
2.1)访问范围说明符:
public:公有成员在程序的任何函数或类中都能被访问。
private :只能由类自己的函数或友元访问。
protect:用于继承。
2)类class与struct的区别是class里的成员被默认为私有。
3)数据成员一般都被定义为private类型。
4)初始化的话:
类内初始化:c++11允许为数据成员提供一个类内初始值;
创建对象是,类内初始值将用于初始数据成员;
类内初始值只能放在等号右边或花括号里边。
3、类定义
几个重要名词:
(1) 类成员
类可以没有成员,也可以定义多个成员。成员可以是数据、函数或类型别名。所有的成员都必须在类的内部声明。
没有成员的类是空类,空类也占用空间。
class People
{

};
sizeof(People) = 1;
(2) 构造函数
① 构造函数是一个特殊的、与类同名,没有返回类型但不是void的成员函数,用于给每个数据成员设置适当的初始值。构造函数可以重载。必须有两个及以上一个带参一个不带参的。
例如:
ex:
class X{
int m;
public:
X (int v) { m=v;}//用参数v初始化m
X() {ch=0;}没有参数的构造函数,在默认初始化时调用
构造函数初始化列表
用于不能用赋值的方法提供初值的成员
1·引用 2·const类型 3·类类型的数据成员
形式
成员1(初始值1)[成员2(初始值2),……]
X(int v=0):r(m){
m=v;
}
在初始化列表中,成员初始化顺序与在类中定义的顺序相同。
ex:
class X{
int a;
int b;
public:
X(int val):a(val),b(a){}//先用val初始化a,再用a初始化b
};
也可以直接用val初始两个
错误
X(int val):b(val):a(b);{};//不能用未初始化的b去初始化a
②委托构造函数
将自己的构造功能交给别人
#include
using namespace std;
class X{
public:
X(int aa,int bb,int cc):a(aa),b(bb),c(cc){};//构造函数1
X(int aa,int bb):X(aa,bb,0)()//构造函数2委托1进行初始化
}
(3) 成员函数
成员函数必须在类内部声明,可以在类内部定义,也可以在类外部定义。如果在类内部定义,就默认是内联函数。可被重载,个数不限。
一般定义为公有。
例如:
返回值类型 类名::函数名(参数)
{
函数体
}
※ “::”–作用域符
(4)定义补充
可使用类型别名来简化类
出来定义数据和函数成员之外,类还可以定义自己的局部类型名字。
适用类型别名有很多好处,他让复杂的类型名字变得简单明了、易于理解和使用,还有助于我们清楚地知道使用该类型的真实目的。
(5)内联函数
①直接在类内部定义。
②在类内部声明,加上inline关键字,在类外部定义。
3】在类内部声明,在类外部定义,同时加上inline关键字。
※注意:此种情况下,内联函数的定义通常应该放在类定义的同一头文件中,而不是在源文件中。这是为了保证内联函数的定义在调用该函数的每个源文件中是可见的。
二、其他
1、析构函数
类名字前面加波浪线,用于释放空间,一般被隐式调用,显式表达时一般要完成某种功能
2、this指针
1) this指针的用处:
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 .
在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用。
this的目的总是指向这个对象,所以this是一个常量指针,我们不允许改变this中保存的地址
2)this指针的使用:
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
3、const函数
常变量: const 类型说明符 变量名
常引用: const 类型说明符 &引用名
常对象: 类名 const 对象名
常成员函数: 类名::fun(形参) const
常数组: 类型说明符 const 数组名[大小]
常指针: const 类型说明符
指针名 ,类型说明符 指针名 ,类型说明符* const 指针名

首*先提示的是:在常变量(const 类型说明符 变量名)、常引用(const类型说明符 &引用名)、常对象(类名 const 对象名)、 常数组(类型说明符 const 数组名[大小]), const” 与 “类型说明符”或“类名”(其实类名是一种自定义的类型说明符) 的位置可以互换。如:
const int a=5; 与 int const a=5; 等同
类名 const 对象名 与 const 类名对象名等同。
4、static函数
属于类但不属于对象;
不依赖于对象单独存在,不能操作非类成员的数据成员。
1)静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。
2)静态全局变量:定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。
3)静态函数:跟静态全局变量的作用类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值