首页 > 编程 > C++ > 正文

从零开始学习C++(类和对象)

2019-11-08 03:14:04
字体:
来源:转载
供稿:网友

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();
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选