C++学习之旅第一站:类

Posted ITWEL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习之旅第一站:类相关的知识,希望对你有一定的参考价值。

C++学习之旅第一站:类_类

一.类的定义与对象的创建

(一).类

I.定义

     简单来说,类是相较于C语言中的“结构体“”而言更为全面的数据类型声明,并不占用内存空间,只有在“类的实例化(通过类名创建对象)”过程中才会需要内存空间,其区别在于结构体中仅包括“成员变量”(基本类型变量或者是结构体类型变量),而类中不仅可以包含“成员变量”,也可以包含对成员变量进行操作的“函数

  实例如下:

#include<stdio.h>
//C语言中的结构体
struct Student
//成员变量
int number;// 排名
char *name;//学生姓名
int grate; //学生成绩
;
//输出函数
void Printf(struct Student ud)
printf("排名为%d的同学是%s,他的成绩是%d",ud.number,ud.name,ud.grate);

int main()
struct Student ud; //定义一个类型struct Student变量ud
ud.number=3; //成员变量的初始化
ud.name="小明";
ud.grate=96;
Printf(ud); //函数调用

II.类结构定义

关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表

C++学习之旅第一站:类_类_02

III.类成员访问方式

   方法一:通过“ . ”访问

创建对象后,可以通过“ . ”来进行访问成员

实例如下:

int main()
//通过类来定义变量,即创建对象
class Student stu1; //也可以省略关键字class
//为类的成员变量赋值
ud.number = 3;
ud.name = "小明";
ud.score = 96;
//调用类的成员函数
ud.Print();
return 0;
方法二:通过“->”(对象指针)访问

对象指针:就是指向对象的一个指针,通过指针对成员进行操作

实例如下:

  (1)在栈(Stack)上创建对象
int main()
//通过类来定义变量,即创建对象
class Student stu1; //也可以省略关键字class
class Student *ud=&stu1;
//为类的成员变量赋值
ud->number = 3;
ud->name = "小明";
ud->score = 96;
//调用类的成员函数
ud->Print();
return 0;
(2)在堆(Heap)上创建变量
int main()
//通过类来定义变量,即创建对象
class Student *ud=new Student;
//为类的成员变量赋值
ud->number = 3;
ud->name = "小明";
ud->score = 96;
//调用类的成员函数
ud->Print();
delete ud; //一定要记得删除,释放空间,防止堆积
return 0;
(3)堆和栈存储区别

I.在栈上创建的对象是有名字的,不用指针指向也可以找到它;但是在堆上创建的对象是没有名字的,我们需要通过指针来指向它,才能访问其成员变量和成员函数

II.栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除.

(二).对象(object)

         在C语言中可以通过结构体名来定义变量,在 C++ 中可以通过类名来定义变量。不同的是,通过结构体定义出来的变量还是叫变量,而通过类定义出来的变量有了新的名称,叫做对象(Object)

实际例子如下:

#include <stdio.h>
//通过class关键字类定义类
class Student
public:
//类包含的变量
char *name; //学生姓名
int number; //学生名次
int score; //学生成绩
//类包含的函数
void Print()
printf("排名为%d的同学是%s,他的成绩是%d",number,name,grate);

;
int main()
//通过类来定义变量,即创建对象
class Student stu1; //也可以省略关键字class
//为类的成员变量赋值
ud.number = 3;
ud.name = "小明";
ud.score = 96;
//调用类的成员函数
ud.Print();
return 0;

在 C++ 中,通过类名就可以创建对象,这个过程叫做类的实例化,因此也称对象是类的一个实例

(Instance)。

有些资料也将类的成员变量称为属性(Property),将类的成员函数称为方法(Method),


在面向对象的编程语言中,经常把函数(Function)称为方法(Method)。

(三).数据类型图(回顾)

C++学习之旅第一站:类_类_03


(四).拓展(new与malloc用法)

I.new用法

  (1)结构

//创建

(数据类型)*(变量名)= new (数据类型)[变量个数];

//销毁

 delete[]变量名;

  (2)具体使用演示
//例1
int *a=new int ;//创建
delete a; //销毁

//例2
int *a=new int[5];
delete[]a;

II.malloc的用法

(1)结构

//创建

(数据类型)*(变量名)=(数据类型 *)malloc(sizeof(数据类型)*(变量个数))

//销毁

  free(变量名);

(2)具体使用演示
int *a = (int *)malloc(sizeof(int)*5);//创建
free(a); //释放

注意:new和delete配套使用,malloc与free配套使用


二.类的成员变量与成员函数

C++学习之旅第一站:类_对象_04

(一)定义

      类简单来说为一种抽象的数据类型,普通数据类型仅包含“成员变量”,而类中既包含“成员变量”又包含“成员函数


(1)类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存,定义类的时候不能对成员变量赋值,类是一种数据类型定义,不占用内存空间,只有在用类定义对象时才会占用空间

(2)类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是:成员函数是一个类的成员,出现在类体中,成员函数的作用范围由类来决定;而普通函数是独立的,作用范围是全局的或在某个命名空间内。

(二)成员函数

如果函数是在类中被定义,则为内联函数,反之,则不是

//方式1
#include<iostream>
using namespace std;
class Student
public:
int number;
char *name;
int score;
public:
void Print();//函数声明

//函数定义
viod Student::Print()
cout<<name<<"的名次为"<<number<<"成绩为"<<score<<endl;
//方式2
#include<iostream>
using namespace std;
class Student
public:
int number;
char C++探索之旅第一部分第九课:数组威武,动静合一

C++学习20 虚基类详解

C++学习---static 有什么作用?

C++ - 在内部,当定义一个类的成员函数时,应该使用成员变量名称还是它的 getter 函数?

面向对象课后深入学习(C++ 类的静态成员详细讲解)

学习c++ 第四天 类 及类的继承--class和struct的区别--static成员