C++ 类和对象学习总结

一.什么是类
面向对象系统由一组交互的对象构成,每个对象都有自己的属性和行为,这些对象通过相互之间的消息传递来协作实现系统的功能。对象所属的类型称为类,类是对一组具有相同属性和行为对象的抽象。
类的基本思想是数据抽象封装。数据抽象是一种依赖接口和实现分离编程的技术。
数据成员与成员函数:结构体内的函数被称为成员函数,结构体中的数据则称为数据成员。这样的结构体被称为类,这种结构体类型的变量被称为对象。
二.访问控制和封装
访问限定符:关键字public、private和protected。一般语法为:
struct 类名
{
public:
公有成员声明;
private:
私有成员声明;
protected:
被保护成员声明;
}

将数据和操作捆绑在一起,并加上访问控制,这在面向对象中称为封装,数据描述对象的属性,操作描述对象的行为。
this指针:每个成员函数都有一个隐含的参数,指向接收消息的对象,称为this指针

class X {
int m;
public:
  void setVal(int m) { this -> m = m; }
  X add(const X& a)  { 
m += a.m;
return *this;	 	//返回当前对象
}
void copy(const X& a) {	//复制对象
  if (this == &a)		//同一对象,无需复制
    return;
  m = a.m;			//拷贝复制
}
}; 

友元:c++引入了friend关键字,如果想让非成员函数访问一个类中的私有数据,应该在类中将这个函数声明为friend(友元)
一个类的友元可以是:
1.全局函数
2.另一个类的成员函数
3.另一个类

(1)友元关系不能被继承。
(2)友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3)友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
三.构造函数和析构函数
构造函数
构造函数在创建对象时被自动调用,负责初始化对象
构造函数的名字和类名字相同,它没有返回类型
是没有返回类型,不是返回void 类型
构造函数的参数通常为数据成员提供初始值
构造函数可以重载
析构函数
析构函数负责在对象生存期结束时返回相关资源和自动释放资源
当对象离开作用域时,或者用delete 释放在堆上创建的对象时,析构函数都会被自动调用
析构函数的名字是类名字前加波浪线“~”
析构函数没有返回类型,也没有任何参数
析构函数不能重载,只能为一个类定义唯一一个析构函数
四.const数据成员
const 可以限定类中的数据成员,描述对象中的常量
在数据成员声明前加const 关键字就将其限定为常量
const 数据成员在构造函数的初始化列表中初始化
创建对象时初始化其中的const 数据成员,之后const 成员的值在对象的整个生存期中都不会改变
五.static成员
不属于某一个对象,属于全部对象共享。

Static数据成员在类定义时就存在了,所以有不同于一般数据成员的特性

  1. Static数据成员必须在类外部定义,且正好定义一次,static成员属于类,在类定义时初始化,而不是想普通数据成员在对象建立时通过构造函数初始化。所以static数据成员定义不应该放在头文件中,应该放在类非内联函数定义地方

  2. 静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员

  3. 静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用

  4. 静态数据成员的值在const成员函数中可以被合法的改变(const函数只能禁止该对象值,却不能禁止该类的成员值)。

  5. 静态数据成员可以成为成员函数的默认参数,而普通数据成员则不可以。

  6. 一般数据成员只能在对象初始化时初始化,static成员在类定义时体外部初始化,而const static数据成员可以在类内部初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值