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

来源:互联网 发布:约翰斯塔克斯数据 编辑:程序博客网 时间:2024/04/27 15:42

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();
0 0
原创粉丝点击