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;
}