您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-02 21:50 232 查看
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/

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

类的声明

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

一个简单的类的定义:

class Student{
//成员变量
char *name;
int age;
float score;
//成员函数
void say(){
printf("%s的年龄是 %d,成绩是 %f\n", 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\n", name, age, score);
}
}stu1, stu2;


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

class{
//成员变量
char *name;
int age;
float score;
//成员函数
void say(){
printf("%s的年龄是 %d,成绩是 %f\n", 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\n", 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: