zoukankan      html  css  js  c++  java
  • C++学习日记(一)————类与对象

     C++远征之封装篇(上)笔记

     所有内容都是听课笔记,愿课堂视频如下:

    C++远征之封装篇(上)-慕课网
    http://www.imooc.com/learn/382

    类和对象

    1 什么是类,什么是对象?

    对象是具体的事物,而类是出于不同的目的从对象中抽象出来的,所以,同一事物可以抽象成不同的类。

    举个例子:

    一只狗狗,就是一个具体的事物,就是一个对象

    当我们养一大群狗的时候,就不是指代一个了而是一群,那也就对应着变成了一个类了,会为狗建立一个档案,并清楚狗的某些信息,比如说:年龄,品种,所掌握的技能(叫,跑)等等,

    将这些信息单独拿出来,就可以定义一个类了。

     

    需要注意的是,“属性”和“方法”所对应定义的信息,并不是狗的所有的信息,只是一部分,比如,狗的属性不只是年龄和类别,还有公母,摇尾巴和不摇尾巴,对吧!狗的方法也不只是跑和叫,它还可以咬,还可以撒欢儿,滚来滚去等等,所以,类所抽象出来的对应信息,要视目的而定,同一个类所抽象出来的信息也可能完全不同。

    类的定义:数据成员,成员函数

     2.类的访问限定符

    再举一个例子

    电视机的功能或细节有些被显示,有些并没有被描述,但并不意味着不存在,而是被隐藏起来了,

    把实践细节封装起来,只暴露给用户关心的细节,这就是封装的意思。

    如何把想要暴露的信息暴露出来,把想要隐藏的信息隐藏起来呢?

    这就是C++中的访问限定符的作用了!如果定义的时候希望被暴露,就用“public”来修饰,如果希望被隐藏,就用“prevate”来修饰。

     对象的实例化

    在c++中类就是一个模板,对象实例化就是计算机根据一个类制造出多个对象的过程。

    1.对象的实例化分两种方式

    一种是:从栈实例化,还有一种是从堆实例化。下面分别来说、

    从栈实例化:

    从堆实例化:

    使用的时候做如下定义:如果要定义一个对象的话呢,就使用"TV"用一个指针指向一块儿内存(这块儿内存是用"new"运算符申请出来的),这块内存就是作为未来"TV"的对象来使用;当然,也可以申请一个数组,这个数组有20个元素,如果是从栈中申请对象(就是上例那样)不需要再释放,系统会自动将占用的内存回收掉。但如果是从堆中申请的,切记一定要将这块儿内存释放掉!(就是用“delete函数进行释放”)

     那对象建立起来之后的目的是什么的?是通过访问对象的各种成员来达到预期的要求

    那又该怎么访问这些对象成员呢?

    2.对象成员的访问方法

    对单一对象成员

    通过不同实例化的方法,生成的对象在访问数据成员和成员函数的方式也不同。故而访问的方式也不同。

    通过栈实例化对象后,如果想访问其对象的话,可以用“.”来赋相应的值,也可以用“.”来访问它的成员函数,下图就是用栈定义完一个对象后,来访问其的方式。

    如果是通过堆实例化对象的话,如下图所示,定义一个指针p,p通过这样的一种符号“->”来进行访问,用完记得删除。

    对数组对象成员(以堆为例)

    如果我们要访问“type”,就要调用它的成员函数,那么就需要一个for循环来分别进行赋值和调用。如果是从堆中进行的,完成后记得释放内存

     

     代码示例:

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    class Coordinate//先定义一个类 ,所取的类名最好能一眼就能看出类的功能 
    {
        public:
        int x;
        int y;
        void printX()
        {
            cout<< x <<endl;
        }
        void printY()
        {
            cout<< y <<endl;
        }
    };//这里要打上一个分号,不要忘了! 
    int main(void)
    {
        Coordinate coor;//通过栈实例化
        coor.x = 10;
        coor.y =20;
        coor.printX();
        coor.printY();
        
        Coordinate *p=new Coordinate();//通过堆实例化 
        if(NULL == p)//new 运算符存在申请失败的可能,故而引入if条件进行选择。 
        {
            //failed
            return 0;
        }
        
        p->x=100;
        p->y=200;
        p->printX();
        p->printY();
        delete p;
        p= NULL;
         
        system("pause");
        return 0;
    }
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    class Coordinate//先定义一个类 ,所取的类名最好能一眼就能看出类的功能 
    {
        public:
        int x;
        int y;
        void printX()
        {
            cout<< x <<endl;
        }
        void printY()
        {
            cout<< y <<endl;
        }
    };//这里要打上一个分号,不要忘了! 
    int main(void)
    {
        Coordinate coor;//通过栈实例化
        coor.x = 10;
        coor.y =20;
        coor.printX();
        coor.printY();
        
        Coordinate *p=new Coordinate();//通过堆实例化 
        if(NULL == p)//new 运算符存在申请失败的可能,故而引入if条件进行选择。 
        {
            //failed
            return 0;
        }
        
        p->x=100;
        p->y=200;
        p->printX();
        p->printY();
        delete p;
        p= NULL;
         
        system("pause");
        return 0;
    }

    正常运行的界面如下(dev):

    相信坚持的力量!
  • 相关阅读:
    (数据集)Quality of Web Service (QWS) Datasets
    [扫盲] Salesforce.com: 业界云计算(Cloud Computing)的主要倡导者之一
    Major conference/journal for Web Service [updating]
    ICWS 2009 Accepted Research Paper List (63篇)
    [论文笔记]Web服务集成的策略规划 (CIMS 2008)
    [论文笔记]Global and Local QoS Guarantee in Web Service Selection (BPM 2005)
    [论文笔记](东北大学)基于组合服务执行信息的服务选取方法研究(计算机学报, 2008)
    WWW2009相关论文
    [文章笔记]Web Service Discovery and Client Goals(Computers, 2009)
    [论文笔记](东北大学)支持组合服务选取的QoS模型及优化求解(计算机学报06)
  • 原文地址:https://www.cnblogs.com/duijinglianxinduijingxiuxing/p/7504208.html
Copyright © 2011-2022 走看看