news 2026/5/19 2:41:10

详解C++编程中类的声明和对象成员的引用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详解C++编程中类的声明和对象成员的引用

C++类的声明和对象的创建
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。

与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,占用内存空间。
类的声明

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

一个简单的类的定义:

1

2

3

4

5

6

7

8

9

10

classStudent{

//成员变量

char*name;

intage;

floatscore;

//成员函数

voidsay(){

printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);

}

};

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

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

类可以理解为一种新的数据类型,该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是,Student 是一种复杂数据类型,可以包含基本类型,而且多了很多基本类型中没有的特性。
需要注意的是:在类声明的最后有一个分号(;),它是类声明的一部分,表示类声明结束了,不能省略。
创建对象

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

1

Student LiLei;//创建对象


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

1

inta;//定义整形变量


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

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

1

2

classStudent LiLei;//正确

Student LiLei;//同样正确

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

1

2

Student all_student[100];

Student *pointer;


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

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

1

2

3

4

5

6

7

8

9

10

classStudent{

//成员变量

char*name;

intage;

floatscore;

//成员函数

voidsay(){

printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);

}

}stu1, stu2;

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

1

2

3

4

5

6

7

8

9

10

class{

//成员变量

char*name;

intage;

floatscore;

//成员函数

voidsay(){

printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);

}

}stu1, stu2;

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

一个完整的示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <stdio.h>

//类可以在所有函数之外定义

classStudent{

public://类包含的变量

char*name;

intage;

floatscore;

public://类包含的函数

voidsay(){

printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);

}

};

intmain(){

//创建对象

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();

return0;

}

运行结果:

1

2

小明的年龄是 15,成绩是 92.500000

李雷的年龄是 16,成绩是 80.000000


public 是C++中的关键字,用来修饰成员变量和成员函数,表示它们是公有的。我们将在下节详细讲解 public,这里只需要知道,只有 public 后面的成员变量和成员函数才能被创建的对象访问到。像本节开头的例子,没有使用 public,那么创建对象后就不能使用任何成员。
main 函数中首先创建了一个对象 stu,然后又定义了一个 Student 类型的指针变量。可以发现,和结构体(struct)类似,一个对象通过成员选择符”.“来访问成员变量和成员函数,而指针变量通过指针操作符”->“来访问成员。

对象指针和结构体指针类似。

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

1

2

Student *pt;

pt = &Student;

C++对象成员的引用
在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法:

  1. 通过对象名和成员运算符访问对象中的成员;
  2. 通过指向对象的指针访问对象中的成员;
  3. 通过对象的引用变量访问对象中的成员。

通过对象名和成员运算符访问对象中的成员

例如在程序中可以写出以下语句:

1

stud1.num=1001;//假设num已定义为公用的整型数据成员

表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。注意不能只写成员名而忽略对象名。

访问对象中成员的一般形式为:
对象名.成员名
不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如:

1

2

stud1.display( );//正确,调用对象stud1的公用成员函数

display( );//错误,没有指明是哪一个对象的display函数


由于没有指明对象名,编译时把display作为普通函数处理。应该注意所访问的成员是公用的(public )还是私有的(private ),只能访问public成员,而不能访问private成员。如果已定义num为私有数据成员,下面的语句是错误的:

1

stud1.num=10101;//num是私有数据成员,不能被外界引用


在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。
通过指向对象的指针访问对象中的成员

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 2:34:35

NPJ Precis Oncol(IF=8)中国科学院深圳先进技术研究院吴红艳教授等团队:深度可解释放射基因组学解析乳腺MRI肿瘤微环境

01文献学习今天分享的文献是由中国科学院深圳先进技术研究院吴红艳教授等团队于2026年5月在肿瘤学顶刊《npj Precision Oncology》&#xff08;中科院1区top&#xff0c;IF8&#xff09;上发表的研究“Deep interpretable radiogenomic workflow deciphers tumor microenvironm…

作者头像 李华
网站建设 2026/5/19 2:26:33

岩体结构数字化识别与力学参数变异性表征工程应用【附数据】

✨ 长期致力于岩体工程、岩体结构、力学参数、量化表征、变异性研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;多规则区域生长与点对一致性投票耦合的…

作者头像 李华
网站建设 2026/5/19 2:25:47

TPS61088RHLR升压芯片:从数据手册到实战PCB设计的完整指南

1. TPS61088RHLR升压芯片基础认知 第一次拿到TPS61088RHLR这颗芯片时&#xff0c;我盯着数据手册上密密麻麻的参数表格有点发懵。作为TI&#xff08;德州仪器&#xff09;推出的同步升压转换器&#xff0c;它的核心能力是将低电压转换为稳定的高电压输出。实测用单节锂电池&…

作者头像 李华
网站建设 2026/5/19 2:17:05

从递归到滚动数组:爬楼梯问题的四种解法演进与实战剖析

1. 从生活场景理解爬楼梯问题 第一次遇到这个算法题是在面试现场&#xff0c;当时面试官笑眯眯地问我&#xff1a;"假设你每天上班要爬10层楼梯&#xff0c;每次可以跨1阶或者2阶&#xff0c;有多少种不同的上楼方式&#xff1f;"我愣了一下——这不就是斐波那契数列…

作者头像 李华