C++类的定义,访问和集成,对象和类的指针

本文深入解析C++中的类定义、对象创建、数据成员访问及类的继承,并通过实例展示了如何利用类创建对象,访问数据成员,以及实现类的多重继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类的定义

   类是C++核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。

   定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包含了什么,以及可以在这个对象上执行哪些操作。

类定义是以关键字class开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。例如我们使用关键字class定义Box数据类型。

class Box
{
   public:
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度
};

C++对象

类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。下面的语句声明了类Box的两个对象

Box Box1;          // 声明 Box1,类型为 Box
Box Box2;          // 声明 Box2,类型为 Box

对象Box1和Box2都有它们各自的数据成员。

访问数据成员

类的对象的公共数据成员可以使用直接成员访问运算符(.)来访问

#include <iostream>
 
using namespace std;
 
class Box
{
   public:
      double length;   // 长度
      double breadth;  // 宽度
      double height;   // 高度
};
 
int main( )
{
   Box Box1;        // 声明 Box1,类型为 Box
   Box Box2;        // 声明 Box2,类型为 Box
   double volume = 0.0;     // 用于存储体积
 
   // box 1 详述
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;
 
   // box 2 详述
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
 
   // box 1 的体积
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Box1 的体积:" << volume <<endl;
 
   // box 2 的体积
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Box2 的体积:" << volume <<endl;
   return 0;
}

运行结果

Box1 的体积:210
Box2 的体积:1560

类的继承

面向对象程序设计中最重要的一个概念就是继承,继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易,这样做,也达到了重用代码功能和提高执行时间的效果。

当创建一个类时,你不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。

一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名,形式如下:

class derived-class: access-specifier base-class

其中,访问修饰符access-specifier是public,protected或private其中的一个,base-class是之前定义过的某个类的名称。如果未使用访问修饰符access-specifier,则默认为private.每个基类之间用逗号分隔。

#include <iostream>
 
using namespace std;
 
// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};
 
// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};
 
// 派生类
class Rectangle: public Shape, public PaintCost//派生类Rectangle同时继承了两个类Shape和PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};
 
int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;
 
   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;
 
   return 0;
}

一个指向C++类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符->,就像访问指向结构的指针一样。与所有的指针一样,必须在使用指针之前,对指针进行初始化。

 

#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
	//static int number;
	int number;  
	string name;
//public:
	Student()
	{

	}
	void set(string str)
	{
		name=str;
		number++;//调用静态数据成员
	}
	void print()//类成员函数print()
	{
		std::cout<<name<<":The number of the students is"<<number<<"numbers."<<endl;//调用静态数据成员
	}
};
int main()
{
	Student *s1;//对于类Student,定义了一个指针,是一个内存地址,指向内存中存放的的类对象(包括一些成员变量所赋的值,在定义s1的时候并没有分配内存,只有执行new后才会分配内存,且为内存堆。
	//类的指针,用的是内存堆,是个永久变量,除非你释放它,需要用new运算符分配内存
	s1=new Student();//注意,用new,一定要delete
	s1->set("tom");//指针用->操作符引用成员
	Student s2;//对于类Student,定义了一个对象,利用类的构造函数在内存中分配一块内存(包括一些成员变量所赋的值)
	//类的对象,用的是内存栈,是个局部的临时变量
	s2.set("wang");//对象引用成员,用.操作符
	s1->print();
	s2.print();
	return 0;
}

 

 

 

C++的精髓之一就是多态性,只有指针或者引用可以达到多态,对象不行。

用指针,第一可以实现多态,第二,在函数调用时,传指针参数,不管你的对象或结构参数多么庞大,用指针,传过去的就是4个字节,如果用对象,参数传递占用的资源就大了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值