类与对象

在未接触C++之前,知道c与c++的区别就是c++是面向对象的一门语言,但是 对于什么是对象和类根本不了解,当我开始学c++的时候才认真去做了了解,了解什么是类,对象?


类是面向对象程序设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,因为类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。有没有很复杂?

什么是类

  类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。通常来说, 一个类的定义包含两部分的内容, 一是该类的**属性**, 另一部分是它所拥有的**方法**。
 
####类的一般定义如下:
使用关键字class来定义类,
```
 class <类名>
  {
   public:
    //成员函数
   private:
     //成员变量
  };
    //成员函数的实现
  
```
注意:
(1)类名命名规则;
(2) public private 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。
一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口。
(3) 结束部分的分号不可省略。

(4)sizeof(类)的大小是成员变量的大小。遵循内存对齐规则,在内存中的存储如下:


示例:


```
class AA
{
public:
void fun1();
void fun2();
private:
int a;
double f;
};

```

可以求得这里sizeof(AA)为16。


c++的三大特性:

封装,继承,多态


c++默认六类成员函数

c++默认的成员函数共有六个,当我们不自己写这六个函数时,系统会调用默认的成员函数,但是我们一但自己写了之后系统就会调用我们自己写的。


函数介绍:

构造函数,函数名与类名相同,他的作用主要是做初始化,无参构造函数和默认构造函数相同。

拷贝构造函数,创建对象时用同类对象进行初始化。

运算符重载函数,重载主要是为了增强代码的可读性,而且操作起来更加简单方便。

析构函数,析构函数主要是为了执行一些清理工作,释放动态开辟的内存空间等,只有在需要做清理工作的时候才需要我们自己写函数,否则可以调用默认的析构函数。

另外两个默认函数分别是地址重载和加const的地址的重载,由于我们用的不是很多,所以我们不做过多的介绍。


这里写了一个日期类简单介绍这几个常用的几个成员函数:

示例:

class Date
{
public:
	Date(int year=2017, int month=7, int day=2) //构造函数
	{
		cout<<"Date"<<endl;
		_year = year;
		_month = month;
		_day = day;
	}
	Date(const Date& d)   //拷贝构造函数
	{
		cout<<"Date(const Date& d)"<<endl;
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	~Date()  //析构函数
	{
		cout<<"~Date()"<<endl;
	}
	bool operator==(const Date& d)  //运算符的重载
	{
		return _year == d._year
			&& _month == d._month
			&& _day == d._day;
	}
	void Display()
	{
		cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
	}
private:
	int _year;
	int _month;
	int _day;
};


注意:如果我们不写六个成员函数,编译器会自动调用默认的六个成员函数,因此,无论我们写不写,一个类里面至少有六个成员函数,如果我们自己定义了,编译器就会调用我们自己写的,不会调用系统的。


隐含this指针介绍

隐含的this指针,当我刚知道它的时候,觉得它真的很神奇,因为在每一个类的成员函数里面,都有一个隐含的this指针,我们以构造函数为例:

我们怎么证明this指针的存在呢?我们利用上面的构造函数就可以简单证明了, 如下:

Date(int year=2017, int month=7, int day=2) //构造函数
	{
		cout<<"Date"<<endl;
		this->_year = year;
		this->_month = month;
		this->_day = day;
	}
当我们这样写的时候会发现不会有任何的错误,这样是不是证明了this指针的存在呢?而且当我们不写this指针的时候,编译器会自动给我们加上。 当然了,既然是隐含的,那么我们就不能在参数中把它给体现出来,像上面代码这样的写法是错的:

Date(Date* this, int year=2017, int month=7, int day=2) 

因为this指针是隐含的,所以我们就不能把它放到明面上来,就像一个人的私房钱一样,是需要保密的。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值