• 大四中软实习笔记20130227


    C++语法:

    1 结构体和类的区别
    1.1 结构体
    1.1.1 怎样定义1个student数据类型
    struct student
    {
        int number;
        char name[20];
        int age;
    };    //不能少;号
    注意:student和int是同一级别

    1.1.2 怎样定义1个student型变量
    student stu1;

    1.1.2 怎样给stu1变量赋初值
    方法一:
    student stu1;
    stu1.number=1001;
    strcpy(stu1.name,"zhangsan"); //输入参数"zhangsan",本质上代表的是字符'z'的地址
    stu1.age=21;

    方法二:
    student stu1={1001,"zhangsan",21};


    代码:
    #include <stdio.h>
    #include <string.h>
    struct student
    {
        int number;
        char name[20];
        int age;
    };

    int main()
    {
        student stu1;
        stu1.number=1001;
        strcpy(stu1.name,"zhangsan"); //输入参数"zhangsan",本质上代表的是字符'z'的地址
        stu1.age=21;
        printf("%d\t%s\t%d\n",stu1.number,stu1.name,stu1.age);


        return 0;
    }


    1.2 类
    1.2.1 类与结构体的区别
    类的默认访问权限是private
    结构体的默认访问权限是public

    1.2.2
    以后,将class类型的访问权限都设置为public----学习
    代码:
    #include <stdio.h>
    #include <string.h>
    class student
    {
    public:
        int number;
        char name[20];
        int age;
    };

    int main()
    {
        student stu1;
        stu1.number=1001;
        strcpy(stu1.name,"zhangsan");
        stu1.age=21;
        printf("%d\t%s\t%d\n",stu1.number,stu1.name,stu1.age);


        return 0;
    }


    1.2.3 类的四大成员函数
    1.2.3.1 构造函数
    注意:定义变量时,自动调用(所以,不需要写函数名)
    代码:
    #include <stdio.h>
    #include <string.h>
    class student
    {
    public:
        int number;
        char name[20];
        int age;
        void print();
        student();
        student(int num,char *nam,int ag);
    };

    student:: student()
    {
        number=0;
        strcpy(name,"");
        age=0;
    }

    student:: student(int num,char *nam,int ag)
    {
        number=num;
        strcpy(name,nam);
        age=ag;
    }

    void student:: print()
    {
        printf("%d\t%s\t%d\n",number,name,age);   
        return;
    }

    int main()
    {
        student stu1;
        //student stu2(1003,"wangwu",23);
        //stu2.print();
        stu1.print();


        return 0;
    }

    改进代码:
    改进原因:name为数组变量,不好。因为使用strcpy函数时,可能会导致系统崩溃;如果数组设置大了,又浪费空间。
    解决办法:使用动态内存分配,即将name设置为地址变量

    知识点:
    1 new的使用方法
    注意:
    1 new是运算符,它和+-*/是同一级别
    2 new后面直接跟数据类型(四大基本数据类型、类名)
    3 数据类型后面跟[]
    4 []里面的数组,代表了 几个 单位的内存空间大小。   单位:1、4、8  200
    5 真正的内存空间大小是 单位*n
    6 一旦分配成功,系统不会自动释放,所以需要我们手动释放-------非常重要


    2 delete的使用方法
    delete []p;

    1.2.3.2析构函数
    产生的原因:就是为了使用delete

    知识点:
    1 局部变量(auto自动变量)和全局变量
    尽量使用局部变量来解决问题,因为它是自动的;
    万不得已才需要使用动态内存分配。


    1.2.3.3 拷贝构造函数---特殊的构造函数
    自己的特点:参数是student类型的
    代码:
    #include <stdio.h>
    #include <string.h>


    class student
    {
    public:
        int number;
        char *name;
        int age;
        void print();
        student();
        student(int num,char *nam,int ag);
        student(student &other);
        ~student();
    };

    student:: student()
    {
        number=0;
        name=new char[1];
        strcpy(name,"");
        age=0;
    }

    student:: student(student &other)
    {
        number=other.number;
        name=new char[strlen(other.name)+1];
        strcpy(name,other.name);
        age=other.age;

    }

    student:: ~student()
    {
        printf("开始析构了\n");
        delete []name;
    }

    student:: student(int num,char *nam,int ag)
    {
        number=num;
        name=new char[strlen(nam)+1];
        strcpy(name,nam);
        age=ag;
    }

    void student:: print()
    {
        printf("%d\t%s\t%d\n",number,name,age);   
        return;
    }

    int main()
    {
        student stu1(1001,"zhangsan",21);
        student stu2(stu1);
        stu2.print();

        return 0;
    }


    1.2.3.4 赋值函数
    注意点:
    1 不是构造函数
    2 等号两边的变量(对象),都已经构造过了
    student stu1=stu2;
    student stu1(stu2);   //实际都调用的是拷贝构造函数   

    3 等号两边的对象应该属于同一类,如为student类
    4 系统默认的赋值函数,几乎不能用,要重写。

    知识点:
    1 this
    为当前对象的地址
    赋值函数中要用,而且是对比2个对象是否相等   this==&other
    不能用*this==other

    2 返回值是为了解决链式传送的问题
    stu3=stu2=stu1;

    3 重新给name分配内存空间时,不要忘了,要将不用的name释放掉(实际指 原name所指向的内存空间)。

    4 不要自己给自己赋值

    代码:
    #include <stdio.h>
    #include <string.h>

    class student
    {
    public:
        int number;
        char *name;
        int age;
        void print();
        student & operator=(student &other);
        student();
        student(int num,char *nam,int ag);
        student(student &other);
        ~student();
    };

    student:: student()
    {
        number=0;
        name=new char[1];
        strcpy(name,"");
        age=0;
    }

    student:: student(student &other)
    {
        number=other.number;
        name=new char[strlen(other.name)+1];
        strcpy(name,other.name);
        age=other.age;

    }

    student & student:: operator=(student &other)
    {
        if(this==&other)
            return *this;
        number=other.number;
        char *namebak=name;
        name=new char[strlen(other.name)+1];
        strcpy(name,other.name);
        age=other.age;
        delete []namebak;
        return *this;
    }

    student:: ~student()
    {
        printf("开始析构了\n");
        delete []name;
    }

    student:: student(int num,char *nam,int ag)
    {
        number=num;
        name=new char[strlen(nam)+1];
        strcpy(name,nam);
        age=ag;
    }

    void student:: print()
    {
        printf("%d\t%s\t%d\n",number,name,age);   
        return;
    }

    int main()
    {
        student stu1(1001,"zhangsan",21);
        student stu2(1002,"lisi",22);
        student stu3(1003,"wangwu",23);
        stu3=stu2=stu1;
        //stu3.operator=(stu2);

        stu3.print();


        return 0;
    }

    知识点:
    引用
    1 引用的概念
    引用就是 别名
    int a=10;
    int b=a;  //内存中有2个10

    int a=10;
    int &b=a; //内存中有1个10----b和a是一回事
    a=20;
    b=30;


    代码:
    #include <stdio.h>
    #include <string.h>
    void swap(int &m=a,int &n=b)    //假想成这样
    {
       

        return;
    }

    int main()
    {
        int a=10;
        int b=20;
        swap_etc(a,b);
        printf("%d\t%d\n",a,b);

        return 0;
    }

    题目:在student类的四大基本成员函数上,增加1个成员变量chengji(是score类的变量,包含math/english/computer,求和的成员函数)

  • 相关阅读:
    Python使用mechanize模拟浏览器
    &lt;五&gt;读《《大话设计模式》》之工厂模式
    SQLite3基本使用从shell到python
    Android Monkey具体解释
    生女孩继续生,直到男孩,100年后
    android 仿EF看视频弹出练习功能
    秒针系统-中国领先的第三方营销数据技术公司
    凤凰男_百度百科
    基于Web的在线建模工具
    WSS与Project Server集成
  • 原文地址:https://www.cnblogs.com/blueswitkey/p/2943766.html
Copyright © 2020-2023  润新知