史上最全的C++面试宝典(五)—— 结构体、类与对象

本文是C++面试的精华篇章,详细介绍了结构体、类与对象的概念和使用,包括数据抽象、封装、继承、多态等核心概念。重点讲解了结构体的定义、访问成员、作为函数参数及指针使用,以及类的定义、访问修饰符、构造函数、析构函数、拷贝构造函数、友元函数、静态成员等。此外,还探讨了数据抽象与封装的重要性及其在面向对象编程中的应用,以及继承和多态的概念。文章最后列举了一些常见的C++面试题,帮助读者巩固理解。
摘要由CSDN通过智能技术生成

参考:https://www.runoob.com/cplusplus/cpp-tutorial.html

本教程旨在提取最精炼、实用的C++面试知识点,供读者快速学习及本人查阅复习所用。

目录

第五章  结构体、类与对象

5.1  结构体

5.2  类和对象

5.3  数据抽象与封装

5.4  继承

5.5  多态

5.6  相关面试题


第五章  结构体、类与对象

5.1  结构体

5.1.1  定义结构

struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量,这是可选的。上面是声明一个结构体类型 Books,变量为 book。

5.1.2  访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)

Books Book1;        // 定义结构体类型 Books 的变量 Book1
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob"); 
strcpy( Book1.subject, "编程语言");
Book1.book_id = 12345;

5.1.3  结构作为函数参数

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books book );
 
// 声明一个结构体类型 Books 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定义结构体类型 Books 的变量 Book1
   Books Book2;        // 定义结构体类型 Books 的变量 Book2
 
    // Book1 详述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "编程语言");
   Book1.book_id = 12345;
 
   // Book2 详述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技术");
   Book2.book_id = 12346;
 
   // 输出 Book1 信息
   printBook( Book1 );
 
   // 输出 Book2 信息
   printBook( Book2 );
 
   return 0;
}
void printBook( struct Books book )
{
   cout << "书标题 : " << book.title <<endl;
   cout << "书作者 : " << book.author <<endl;
   cout << "书类目 : " << book.subject <<endl;
   cout << "书 ID : " << book.book_id <<endl;
}

5.1.4  指向结构的指针

定义指向结构的指针,方式与定义指向其他类型变量的指针相似。为了使用指向该结构的指针访问结构的成员,必须使用 -> 运算符,如下所示:

struct Books *struct_pointer;
struct_pointer = &Book1;
struct_pointer->title;

5.2  类和对象

5.2.1  类的定义

class Box
{
   public:
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度
      double getVolume(void);// 返回体积
};

5.2.2  类的声明

Box box1;
Box box2 = Box(parameters);
Box box3(parameters);
Box* box4 = new Box(parameters);

5.2.3  访问类的成员

box1.length = 5.0;
cout << box1.length << endl;

5.2.4  类成员函数

成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义

class Box
{
   public:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
   
      double getVolume(void)
      {
         return length * breadth * height;
      }
};
//您也可以在类的外部使用范围解析运算符 :: 定义该函数
double Box::getVolume(void)
{
    return length * breadth * height;
}

//调用成员函数同样是在对象上使用点运算符(.)
Box myBox;          // 创建一个对象
myBox.getVolume();  // 调用该对象的成员函数

5.2.5  类访问修饰符

数据封装是面向对象编程的一个重要特点,它防止函数直接访问类的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。

class Base {
 
   public:
   // 公有成员
 
   protected:
   // 受保护成员
 
   private:
   // 私有成员
};
  • 公有成员在程序中类的外部是可访问的。
  • 私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。如果没有使用任何访问修饰符,类的成员将被假定为私有成员
  • 保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。

5.2.6  类的特殊函数

1)构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。

2)析构函数

类的析构函数是类的一种特殊成员函数,它会在每次删除所对象时执行。析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源

class Line
{
   public:
      void setLength( double len );
      double getLength( void );
      Line();  // 这是构造函数
      Line(double len);  // 这是带参数的构造函数
      ~Line();  // 这是析构函数声明
 
   privat
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值