• c++类的声明和对象的定义---10


    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/

    类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,占用内存空间。

    类的声明

    类是用户自定义的类型,如果程序中要用到类,必须先进行声明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。

    一个简单的类的定义:

        class Student{
        //成员变量
        char *name;
        int age;
        float score;
        //成员函数
        void say(){
        printf("%s的年龄是 %d,成绩是 %f
    ", name, age, score);
        }
        };

    该例创建了一个Student类,它包含了3个成员变量和1个成员函数。

    class是C++中的关键字,用于声明一个类;紧接 class 关键字之后的是我们自定义的类名 Student;由{ }包围的是类体。声明类时不能对成员变量进行初始化,只有在创建对象以后才能赋值。

    类可以理解为一种新的数据类型,该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是,Student 是一种复杂数据类型,可以包含基本类型,而且多了很多基本类型中没有的特性。

    需要注意的是:在类声明的最后有一个分号(;),它是类声明的一部分,表示类声明结束了,不能省略。

    创建对象

    声明了 Student 数据类型之后,就可以用它来定义变量了,如

    Student LiLei; //创建对象

    该语句声明了一个名字为 LiLei、数据类型为 Student 的变量。这和:

    int a; //定义整形变量

    语句定义了一个整型变量表达的意思是类似的。而 LiLei 这个变量我们称之为 Student 类的对象。

    在定义类的对象时,class 关键字可要可不要。但出于习惯我们通常都会省略掉class关键字,例如:

        class Student LiLei; //正确
        Student LiLei; //同样正确

    创建类的对象时,除了能定义单个变量以外,还可以定义一个数组或者指针。例如:

        Student all_student[100];
        Student *pointer;

    第一条语句定义了一个 all_student 数组,该数据拥有100个元素,每个元素都是 Student 类型。第二条语句定义了一个 Student 类型的指针 pointer,该指针可以指向 Student 类型的变量(对象),用法和普通指针一样。

    声明类的同时创建对象

    和结构体(struct)类似,你可以先声明类,然后再创建对象,也可以在声明类的同时创建对象。如下所示:

        class Student{
        //成员变量
        char *name;
        int age;
        float score;
        //成员函数
        void say(){
        printf("%s的年龄是 %d,成绩是 %f
    ", name, age, score);
        }
        }stu1, stu2;

    这个时候你也可以省略类名,直接创建对象。如下所示:

        class{
        //成员变量
        char *name;
        int age;
        float score;
        //成员函数
        void say(){
        printf("%s的年龄是 %d,成绩是 %f
    ", name, age, score);
        }
        }stu1, stu2;

    直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。

    一个完整的示例:

        #include <stdio.h>
        //类可以在所有函数之外定义
        class Student{
        public: //类包含的变量
        char *name;
        int age;
        float score;
        public: //类包含的函数
        void say(){
        printf("%s的年龄是 %d,成绩是 %f
    ", name, age, score);
        }
        };
        int main(){
        //创建对象
        Student stu;
        stu.name = "小明";
        stu.age = 15;
        stu.score = 92.5f;
        stu.say();
        //定义指针
        Student *pt_stu = &stu;
        pt_stu->name = "李雷";
        pt_stu->age = 16;
        pt_stu->score = 80;
        pt_stu->say();
        return 0;
        }

    运行结果:
    小明的年龄是 15,成绩是 92.500000
    李雷的年龄是 16,成绩是 80.000000

    public 是C++中的关键字,用来修饰成员变量和成员函数,表示它们是公有的。我们将在下节详细讲解 public,这里只需要知道,只有 public 后面的成员变量和成员函数才能被创建的对象访问到。像本节开头的例子,没有使用 public,那么创建对象后就不能使用任何成员。

    main 函数中首先创建了一个对象 stu,然后又定义了一个 Student 类型的指针变量。可以发现,和结构体(struct)类似,一个对象通过成员选择符”.“来访问成员变量和成员函数,而指针变量通过指针操作符”->“来访问成员。

    下面在附上一段代码:

    #include <iostream>
    #include <string>
    using namespace std;

    class _test_class_
    {
    private:
        string school = "Henan University of Science and Technology";
    public:
        string name;
        char age;

        template <typename _TYPE_DEFINE>
        _TYPE_DEFINE Test_function(const _TYPE_DEFINE &a,const _TYPE_DEFINE &b)
        {
            return a+b;
        }
        void Display(string name,int age)
        {
            cout <<"school :"<<school<<endl;
            cout <<"name :"<<name<<endl;
            cout <<"age  :"<<age<<endl;
        }
    };

    int main(int argc,const char* argv)
    {
        class _test_class_ class1,class2;
        class1.name = "student1";
        class1.age  = 22;

        class2.name = "student2";
        class2.age  = 33;

        _test_class_*p;
        p = &class1;
        cout << "p-> "<< p->name<<endl;
        class1.Display(class1.name,class1.age);
        class2.Display(class2.name,class2.age);


        return 0;
    }


    对象指针和结构体指针类似,不理解的同学请重温《C和指针》。

    注意:对象指针指向的是一个具体的对象,而不是类。下面的写法是错误的:

        Student *pt;
        pt = &Student;
  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么&nbsp;我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/zxouxuewei/p/5730871.html
Copyright © 2020-2023  润新知