C++语言是面向对象的语言。所以类是C++里面的重点,类是对象的模板。
类的作用就是用来保存数据的。如果有个类class Date
就是用来保存日期的。保存了数据就可以通过其他成员函数去操作数据。
类的声明部分
#include<iostream>using namespace std;class date { public: void SetDate(int y, int m, int d); int IsLeapYear(); void PRint();private: int year, month, day;};类的实现部分
void date::SetDate(int y, int m, int d){ year = y; month = m; day = d;}void date::Print(){ cout << year << "." << month << "." << day << endl;}int date::IsLeapYear(){ return(year %4 == 0 && year % 100 != 0) || (year % 400 == 0);}类的主体
int main(){ int m; date h; h.SetDate(2000, 1, 8); if (h.IsLeapYear()) cout << "2000 is leap year" << endl; h.Print(); system("pause"); return 0; }函数体有两种写法,一种是把函数体直接写到头后面,类的内部,叫做内联函数。内联函数最终产生的软件比较大,但是会快一点。
可以把函数写在类外面,使类的声明部分不会太大,又保持内联。实现如下:
inline void date::SetDate(int y, int m, int d){}或者把函数写在外面,叫做外联函数。一般情况下都喜欢写到外面
int date::IsLeapYear()作用域操作符,表示函数式Date的成员函数
公有和私有
公有:
私有:如果有个函数在私有部分,private,则无法访问。什么都不写的情况下,默认是私有private的。其中有面向对象设计原则。
保护:protected。要学到继承和派生才会详细讲解。
创建第二个类
#include<iostream> using namespace std; class date; class time {}; class people { public: void study(); void woring(date d); private: double height; double weight; double saving; date *Birthday; people *child; time t; };Date放在最后面就找不到了,C++只能前项引用,会出现syntax error: identifier ‘date’。所以要在第一行加入class date;
people class里面在放people child
不允许,则换成people *child
记得C++每个class后面都要有分号;semicolon
C++里还可以实现函数重载,两个函数可以重名,但是里面的参数不能相同
为什么后面要使用指针呢? 如果前面有一整个class,就可以不用指针;如果前面只有class前项引用,就必须使用指针;
关于类中可否初始化的问题? class date { public: void SetDate(int y, int m, int d); int IsLeapYear(); void Print(); private: int year, month, day; }; int date::IsLeapYear() { return(year %4 == 0 && year % 100 != 0) || (year % 400 == 0); } void date::SetDate(int y, int m, int d) { year = y; month = m; day = d; } void date::Print() { cout << year << "." << month << "." << day << endl; }类里面用大括号封装了数据和方法,把类实例化就变成了对象。 对象有属性和行为。
对象
int main() { int m; date h; date date1; date dates[31]; date *pdate; date &date2 = date1; h.SetDate(2000, 1, 8); date1.SetDate(2000, 1, 2); dates[0].SetDate(2000, 1, 2); pdate = new date(); pdate->SetDate(2000, 1, 2); (*pdate).Print(); if(h.IsLeapYear()) cout << " is leap year" << endl; h.Print(); system("pause"); return 0; }date1和数组都可以直接操作,数组保存31个对象date2引用date1,date2就是date1的别名解引用 (*pdate).Print();