C++ 学习总结报告(二)

类和对象

一:类的定义
1:C++允许用户以类的形式自定义数据类型,反映待解决问题中的各种概念,以更自然的方式编写程序。
2:结构体内的函数被称为成员函数,结构体中的数据则称为数据成员。扩展的结构体被称为类,结构体类型的变量被称为对象。
3:数据成员的类内初始化
没有初始值的成员将被默认初始化。数据成员类内初始值只能放在等号“=”右边,或者放在花括号“{}”里,不能使用圆括号“()”。
4:成员函数的类外定义
类外定义的成员函数名字前面要加类名字和作用域符“::”,表示这个函数是在其所属的类作用域内,是这个类的成员函数,不同于全局函数。
二:访问控制和封装
1:访问限定符
struct 类名
{
  public:
  公有成员声明;
  private:
  私有成员声明;
  protected:
  被保护成员声明;
};
(1)public 成员在程序的任何函数或类中都可以被访问,private 成员只能由类自己的成员函数或友元访问,protected 成员可以在派生类中访问。
(2)如果没有指定访问限定符,struct 成员的默认访问限制为public。
2:类和对象
(1)将数据和操作捆绑在一起,并加上访问控制,称为封装。数据描述对象的属性,操作描述对象的行为。
(2)发送消息就是调用成员函数。例如s.print()就是向对象s 发送一个print()消息。
(3)C++引入了一个关键字class 来定义类。如果class的成员没有设置访问限定符,则默认为private。
3:this 指针
  每个成员函数都有一个隐含的参数,指向接收消息的对象,称为this指针。X类的this指针的类型是X*。this指针是一个常量,含有当前实施调用的对象的地址。不能改变this指针的值,也不能取this指针的地址。
4:访问器和修改器
  将数据成员限定为private,并提供public成员函数来对其进行访问,这种成员函数被称为访问器(accessor)和修改器(mutator)。常以一对getX()和setX() 函数的形式出现。
5:友元(friend)
  C++引入了friend关键字,如果想让非成员函数访问一个类中的私有数据,应该在类中将这个函数声明为friend。
  friend关系不可传递。应该尽量避免使用友元。
三:构造函数和析构函数
1:构造函数初始化列表
类中有些成员不能使用赋值的方式提供初始值
引用成员,const 数据成员,类类型的数据成员
针对这种情况的特殊语法称为构造函数初始化列表
成员1(初始值1)[,成员2(初始值2),…]
初始化列表位于构造函数的参数表之后,函数体之前
构造函数(参数表) : 初始化列表 { 函数体 }
2:委托构造函数
  委托构造函数使用所属类的其他构造函数执行自己的初始化过程,把部分或全部职责委托给了其他构造函数
语法形式:
ClassName(参数表):ClassName(参数表){函数体}
3:析构函数(destructor)
  析构函数负责在对象生存期结束时返回相关资源和自动释放资源。当对象离开作用域时,或者用delete 释放在堆上创建的对象时,析构函数都会被自动调用。析构函数的名字是类名字前加波浪线“~”。析构函数没有返回类型,也没有任何参数。析构函数不能重载,只能为一个类定义唯一一个析构函数。
四:const 成员
1:const 可以限定类中的数据成员,描述对象中的常量。在数据成员声明前加const 关键字就将其限定为常量。const 数据成员在构造函数的初始化列表中初始化。创建对象时初始化其中的const 数据成员,之后const 成员的值在对象的整个生存期中都不会改变。
将一个成员函数声明为const,表明这个成员函数不会修改对象的数据成员,能保证对象的常量性
2:声明const成员函数的语法形式
返回类型 成员函数名(参数表) const;
定义const成员函数的语法形式
返回类型 成员函数名(参数表) const { 函数体 }
注意const成员函数声明和定义的语法
对于在类外定义的const成员函数,必须在它的定义和声明中同时指定关键字const
3:只有声明为const 的成员函数才可以被const 对象调用
const 对象不能调用非const 成员函数
非const 对象可以调用const 成员函数
const 成员函数中不能修改类的数据成员
const 成员函数中不能调用其他非const 成员函数
五:static 成员
1:static数据成员的初始化
  static数据成员属于类,不属于某个特定对象,因而不能在构造函数中初始化。static数据成员在类定义之外初始化,使用类名字限定。
int Object::count = 0;
  static成员只能定义一次。定义一般不放在头文件中,而是放在包含函数定义的源文件中。
static成员访问运算符“.”或“->”数据成员可以是任何类型,甚至是所属类的类型。
2:成员函数的指针
定义语法
  普通的函数指针不能指向成员函数,即使参数表和返回类型相同。因为成员函数还有一项信息,即所属的类。定义指向成员函数的指针时也要指明成员函数的类类型。
基本语法
  返回类型 (类名::*指向成员函数的指针)(参数表);

你可能感兴趣的:(c++)