大四中软实习笔记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,求和的成员函数)

posted on 2013-03-05 09:41  冰河程序猿  阅读(199)  评论(0编辑  收藏  举报

导航