C++ 极简总结——类(一)

类构成了实现C++面向对象程序设计的基础,类用来定义对象的行为和属性,类是C++封装的基本单元。

1、类的定义

使用 class 定义一个类一般形式如下:

class 类名
{
	public:
	<共有数据和函数>
	protected:
	<保护数据和函数>
	private:
	<私有数据和函数>
};  

数据成员用来描述对象的属性,允许是任何数据类型。类中的数据成员在声名时不允许初始化。
成员函数用来描述对象的行为,与普通函数一样,可以重载,可以使用默认参数,也可以声名为内联函数。

类成员的访问限制

如果不指定,默认为私有成员。
public :共有成员

protected: 保护成员,
能通过派生类对象在成员函数中访问,
还可以在派生类成员函数中通过派生类访问其基类的protected 成员

private:私有成员

成员函数的实现

  1. 成员函数的实现可以在类内,也可以类外。类内一定要有函数原型说明。
  2. 类内定义的函数默认内联函数
一般形式
<返回类型> <类名>::<函数名>(参数)
{
		函数体
}
//定义一个点类。
#include 
using namespace std;

class Point
{
public:
	void setxy(int x,int y);
	void displayxy();
private:
	int _x;
	int _y;
	
};

void Point::setxy(int x,int y)
{
	_x = x;
	_y = y;
}
void Point::displayxy()
{
	cout<<_x<<","<<_y<<endl;
}
int main()
{
	Point p1;
	p1.setxy(3, 4);
	p1.displayxy();
	return 0;
}
对象的创建和销毁

创建对象时,对象称为类的实例(instance)。为对象分配存储空间主要有静态分配和动态分配两种方式。堆对象采用动态分配,需要手动销毁。(new和delete)静态分配方式,对象的销毁由程序决定。

构造函数和析构函数

c++ 程序中的初始化和清理工作。分别由两个特殊的函数来完成,他们就是构造函数析构函数

构造函数

1. 构造函数的特点:

  • 函数名与类名相同。
  • 可以重载
  • 不能指定返回类型。
  • 不能被显示调用,在创建对象时被自动调用。

2. 默认构造函数
默认构造函数就是无参构造函数,可以自己定义,也可以是编译系统自动生成。当没有为一个类定义任何构造函数的情况下,编译系统会自动生成一个默认构造函数。

析构函数

1. 析构函数的特点:

  • 对象消息前执行清理工作。
  • 函数名与类名相同,需要加 ~
  • 不可以重载,没有参数。
  • 不能指定返回类型。
  • 在释放对象时被自动调用。

2. 默认析构函数
当没有为一个类定义析构函数的情况下,编译系统会自动生成一个默认析构函数。

构造函数的调用顺序与声名对象的顺序一致,析构函数相反。

拷贝构造函数

拷贝构造函数是一种特殊的构造函数,他的作用是用一个已经存在的对象去初始化另一个对象,为了保证所引用的对象不被修改,通常把引用的参数声明为const 参数。
格式如下:

<类名>::(const <类名>&对象名)
{
...
}

特点:

  • 拷贝构造函数名与类名相同,不能指定返回类型
  • 只有一个参数,并且该参数是该类的对象引用
  • 不能被显示调用。
  • 如果一个类没有定义拷贝构造函数,则系统自动生成默认拷贝构造函数,功能是将已知对象的所有数据成员的值拷贝给对应对象的数据成员。
    自动调用的情形
  • 当用一个类的对象去初始化该类的另一个对象。
  • 当函数形参是类的对象,进行形参和实参结合时。
  • 当函数的返回值是类的对象,函数执行完成返回调用者时。
深拷贝与浅拷贝

浅拷贝
又称值拷贝,将源对象的值拷贝到目标对象中去,本质上来说源对象和目标对象共用一份实体,只是所引用的变量名不同,地址其实还是相同的。
深拷贝
拷贝的时候先开辟出和源对象大小一样的空间,然后将源对象里的内容拷贝到目标对象中去,这样两个指针就指向了不同的内存位置。并且里面的内容是一样的。两个指针先后去调用析构函数,分别释放自己所指向的位置。即为每次增加一个指针,便申请一块新的内存,并让这个指针指向新的内存,深拷贝情况下,不会出现重复释放同一块内存的错误

你可能感兴趣的:(C/C++,c++,类)