从C到C++(类的定义,自引用、成员函数重载运算符)

17.类:是在C的struct类型上,增加了“成员函数”。
(struct是在C定义的结构体即数据成员的基础上,又扩展了可以定义函数成员,这样就可以定义类了,与class定义类差不多)

C的struct可将一个概念或实体的所有属性组合在一起,描述同一类对象的共同属性,

C++使得struct不但包含数据,还包含函数(方法)用于访问或修改类变量(对象)的这些属性。
(C++中struct对C进行了扩展,struct中不仅可以包括数据成员,还可以包括函数成员)

#include <iostream> 
using namespace std;

struct Date                  //用 struct关键字定义 Date类 
{
	int d, m, y;              //类中包含三个对象 (变量),分别表示年 月 日 ,三个数据成员
	// 还定义了两个函数成员 
	void init(int dd, int mm, int yy)   // 表示对三个成员初始化 
	{
		d = dd; m = mm; y = yy;
	}
	void print()                        //打印类对象 (类本身不是具体的,就像int数据类型一样) 
	{
		cout << y << "-" << m << "-" << d << endl;
	}
};

int main ()
{
	Date day;              //Date 为类,day 为定义的对象 
	day.print();          //通过类Date对象day调用类Date的print方法
  
	day.init(4, 6, 1999); //通过类Date对象day调用类Date的init方法
						  //也可以直接访问类成员 day.d=4;day.m=6;所以引用类成员函数也是一样 ,可以有参数也可以没有 
							 
  
	day.print();          //通过类Date对象day调用类Date的print方法

   return 0;
}

// 成员函数 返回 “自引用” (*this)

#include <iostream> 
using namespace std;

struct Date                 //现在用struct定义的都称为类了 
{
	int d, m, y;
	void init(int dd, int mm, int yy) {
		d = dd; m = mm; y = yy;
	}
	void print() {
		cout << y << "-" << m << "-" << d << endl;
	}
	Date& add(int dd) {
		d = d + dd;
		return *this;    //this为一个指针,是指向调用这个函数的类型对象指针,
    
				 // 所以*this就是调用这个函数的那个对象, 
             
				 //这个成员函数返回的是“自引用”,即调用这个函数的对象本身
				 //返回的完全就是对象的引用,而不是对象复制品 
             
				//优点:通过返回自引用,可以连续调用这个函数
                           
			       // day.add(3);
             
				 // day.add(3).add(7);  串起来用 ,就像输出输出运算符一样 
	}
};

int main() {
	Date day;
	day.print();          //通过类Date对象day调用类Date的print方法
  
	day.init(4, 6, 1999); //通过类Date对象day调用类Date的init方法
  
	day.print();          //通过类Date对象day调用类Date的print方法
  
	day.add(3);            //可以通过类成员函数 修改类成员数据和访问类成员数据 
	day.add(5).add(7);
	day.print();

	return 0;
}

//成员函数重载“运算符函数”

#include <iostream> 
using namespace std;

struct Date {
	int d, m, y;
	void init(int dd, int mm, int yy) {
		d = dd; m = mm; y = yy;
	}
	void print() {
		cout << y << "-" << m << "-" << d << endl;
	}
	Date& operator+=(int dd)     //operator 为重载的定义关键字 +=为名字 
	 {
		d = d + dd;
		return *this;    //this是指向调用这个函数的类型对象指针,
    
						 // *this就是调用这个函数的那个对象
             
						 //这个成员函数返回的是“自引用”,即调用这个函数的对象本身
             
						 //通过返回自引用,可以连续调用这个函数
             
						 // day.add(3);
             
						 // day.add(3).add(7);
             
	}
};

int main() {
	Date day;
	day.print();          //通过类Date对象day调用类Date的print方法
	
	day.init(4, 6, 1999); //通过类Date对象day调用类Date的init方法
	
	day.print();          //通过类Date对象day调用类Date的print方法
	
	day += 3;            // day.add(3);     
	
	(day += 5) += 7;        //day.add(5).add(7);  +=就相当于add 
	                          //opearator += 为重载运算符函数的全部名字,但引用时候C++允许可以只写+=,当然也可以写day.operator +=(3) 
	                         //即对+=  重新定义了他的含义  叫做运算符重载 
	day.print();

	return 0;                 
	                            
}
原创文章 46 获赞 56 访问量 3876

猜你喜欢

转载自blog.csdn.net/qq_46009744/article/details/105332806