C++类与对象(1)

[C++] 类与对象练习题1 问题 B: 虚拟电话(构造与析构) 虚拟电话包含属性:电话号、状态、机主姓名。 1、电话号是一个类,它包含号码和类型,其中号码是整数类型,类型用单个字母表示用户类别,A表示政府,B表示企业、C表示个人。类操作包括构造、属性的获取和设置等方法,根据需要自行编写。 2、状态用一个数字表示,1表示在用,0表示未用, 3、机主姓名是一个字符串 电话操作包括:构造、析构、打印和查询。 1、构造函数需要考虑复... 阅读详情

类(Class)

类是C++中的一个用户定义的数据类型,它定义了一组属性(数据成员)和方法(成员函数),用于表示和操作一类实体的共有特征。类是描述对象的蓝图或模板。在C++中,类的定义是创建自定义数据类型的一种方式,它由一组成员变量(数据成员)和成员函数(方法)组成。下面将详细介绍类的定义,包括语法、访问控制、构造函数与析构函数、成员函数、友元函数等内容。

1. 类的基本语法

class ClassName {  
public: // 访问控制  
    // 数据成员  
    DataType memberVariable;  

    // 构造函数  
    ClassName(parameters);  

    // 成员函数  
    ReturnType memberFunction(parameters);  
    
private: // 访问控制  
    // 私有数据成员或成员函数  

protected: // 访问控制  
    // 保护数据成员或成员函数  
};

2. 访问控制

C++中的类提供了三种访问控制修饰符:

  • public:公共成员,可以被任何其他代码访问。
  • private:私有成员,仅可以在类内部访问,外部无法直接访问。
  • protected:保护成员,可以在类内部和派生类中访问,但在外部无法直接访问。
  • 示例:
    class Example {  
    public:  
        int publicVar; // 公有成员  
    private:  
        int privateVar; // 私有成员  
    protected:  
        int protectedVar; // 保护成员  
    };

3. 数据成员

数据成员是类的属性,用于存储对象的状态。可以是基本数据类型、结构体、类的实例或其他复杂类型。

示例:

class Person {  
public:  
    std::string name; // 姓名  
    int age; // 年龄  
};

4. 构造函数与析构函数

  • 构造函数:用于初始化对象的特殊成员函数,名称与类名相同, 可以重载。构造函数可以接受参数,也可以是默认构造函数(无参数构造函数)。

  • 析构函数:用于清理对象并释放资源的特殊成员函数,名称与类名相同,但前面加上波浪符 ~。析构函数无法重载,并且不能带参数。

示例:

class Car {  
public:  
    std::string brand;  
    int year;  

    // 构造函数  
    Car(std::string b, int y) : brand(b), year(y) {  
        std::cout << "Car created: " << brand << " " << year << std::endl;  
    }  

    // 析构函数  
    ~Car() {  
        std::cout << "Car destroyed: " << brand << " " << year << std::endl;  
    }  
};

5. 成员函数

成员函数是类内定义的函数,用于对成员变量进行操作。成员函数可以修改类的私有成员,在类外部通过对象调用时可以访问公共成员。

示例:

class Rectangle {  
private:  
    double width, height;  

public:  
    Rectangle(double w, double h) : width(w), height(h) {}  

    double area() {  
        return width * height; // 计算面积  
    }  
};

6. 友元函数

友元函数是可以访问类的私有和保护成员的函数,即使它不是该类的成员。可以将其声明为友元,以实现特定需要。

示例:

class Box {  
private:  
    double width;  

public:  
    Box(double w) : width(w) {}  

    friend void printWidth(Box b); // 声明友元函数  
};  

void printWidth(Box b) {  
    std::cout << "Width: " << b.width << std::endl; // 访问私有成员  
}

7. 完整示例

将上述所有内容结合起来,我们可以定义一个完整的类:

#include <iostream>  
#include <string>  

class Car {  
private:  
    std::string brand;  
    int year;  

public:  
    // 构造函数  
    Car(std::string b, int y) : brand(b), year(y) {}  

    // 成员函数  
    void displayInfo() {  
        std::cout << "Brand: " << brand << ", Year: " << year << std::endl;  
    }  

    // 友元函数  
    friend void showBrand(Car c);  
};  

// 友元函数实现  
void showBrand(Car c) {  
    std::cout << "Brand from friend function: " << c.brand << std::endl;  
}  

int main() {  
    Car myCar("Toyota", 2020);  
    myCar.displayInfo();  
    showBrand(myCar); // 调用友元函数  
    return 0;  
}

8.基本特性

1.封装:

封装是将数据和操作数据的函数(方法)组合在一起,通过将数据的具体实现细节隐藏在类内部,保持类的内部状态独立于外部世界。封装使用访问控制修饰符(public、private、protected)来限定对类成员的访问。

优点:

  • 数据保护:防止未经授权的访问和修改。
  • 易于维护:内部实现可以修改而不影响外部代码。

示例:

class BankAccount {  
private:  
    double balance; // 私有数据成员  

public:  
    BankAccount(double initialBalance) : balance(initialBalance) {}  

    void deposit(double amount) {  
        if (amount > 0) {  
            balance += amount; // 允许访问私有成员  
        }  
    }  

    double getBalance() const {  
        return balance; // 可以读取余额,但不允许直接修改  
    }  
};

2.抽象:

继承是一个类(子类)基于另一个类(父类)创建新类的机制,使得子类可以继承父类的属性和方法。通过继承,子类可以重用代码,扩展功能,以及更好地组织相关的实体。

优点:

  • 代码重用:子类可以使用父类的成员。
  • 形成类之间的层次结构,增强可扩展性。

示例:

class Animal {  
public:  
    void eat() {  
        std::cout << "Eating..." << std::endl;  
    }  
};  

class Dog : public Animal {  
public:  
    void bark() {  
        std::cout << "Woof!" << std::endl;  
    }  
};  

int main() {  
    Dog dog;  
    dog.eat(); // 继承的功能  
    dog.bark(); // 子类特有的功能  
    return 0;  
}

3.继承:

多态是指同一操作可以作用于不同类型的对象,表现出不同的行为。C++ 通过虚函数和函数重载实现多态性。多态可以分为编译时多态(函数重载和运算符重载)和运行时多态(通过虚函数实现)。

优点:

  • 灵活性:同一接口可以产生不同的行为。
  • 可扩展性:可以在不更改现有代码的情况下添加新功能。

示例:

class Base {  
public:  
    virtual void show() { // 虚函数  
        std::cout << "Base class show function." << std::endl;  
    }  
};  

class Derived : public Base {  
public:  
    void show() override { // 重写虚函数  
        std::cout << "Derived class show function." << std::endl;  
    }  
};  

void display(Base* b) {  
    b->show(); // 根据对象类型调用相应的函数  
}  

int main() {  
    Base base;  
    Derived derived;  
    display(&base); // 输出: Base class show function.  
    display(&derived); // 输出: Derived class show function.  
    return 0;  
}

4.抽象:

抽象是一个简化过程,它使得只关注对象的必要特征而忽略不相关的细节。通过抽象,可以设计出更高层次的结构,提供简单的接口,将复杂性封装在内部。

抽象可以通过纯虚函数和抽象类来实现。一个类如果包含一个或多个纯虚函数,则称为抽象类,该类无法被实例化。

优点:

  • 隐藏复杂性:提供简单的接口,用户无需了解内部细节。
  • 支持模块化设计:增强代码的可维护性和可读性。

示例:

class Shape {  
public:  
    virtual void draw() = 0; // 纯虚函数  
};  

class Circle : public Shape {  
public:  
    void draw() override {  
        std::cout << "Drawing a circle." << std::endl;  
    }  
};  

class Square : public Shape {  
public:  
    void draw() override {  
        std::cout << "Drawing a square." << std::endl;  
    }  
};  

int main() {  
    Circle circle;  
    Square square;  

    Shape* shapes[] = { &circle, &square };  
    
    for (Shape* shape : shapes) {  
        shape->draw(); // 根据具体形状调用相应的 draw 方法  
    }  

    return 0;  
}

9.总结

类的定义涉及到成员变量、成员函数、构造函数、析构函数和访问修饰符等各个方面。理解这些概念是掌握C++面向对象编程的基础,有助于设计和实现高效、可维护的代码结构。类的四个基本特征(封装、继承、多态、抽象)共同构成了面向对象编程的核心思想,帮助开发者构建模块化、易于维护和扩展的系统。理解这些特性,可以有效地运用C++进行复杂的应用开发。

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记 软件工程任务:即时缺陷预测(涉及SE+AI知识) 阅读详情

相关推荐

【强化学习的数学原理-赵世钰】课程笔记(一)基本概念

在B站上学习强化学习的课程笔记,笔记非常详细清晰,会持续更新

qq_64671439的博客 1万+

【C++】类与对象-1

本文章详细详解了关于类与对象的知识点,能够增加对面向对象的理解,对类的引入,类的定义,类的访问限定符和封装,作用域,实例化,对象模型和this指针做出了详细讲解

Demon___1的博客 1448

数据结构实验1 集合的交、并、差

姓名:Far_Rainbow 学号: 202505000X 专业: 软件工程 年级:2020级 实验名称:实验1 集合的交、并、差 实验内容: (1)实验目的 通过该实验,让学生复习巩固C语言中的循环结构、循环控制条件、分支结构和数组/链表、函数的调用等有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。 (2)实验内容 通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。 (3)实验要求 从程序完善性上考虑,集合元

Far_Rainbow的博客 2178

CPP类与对象(1)

文章目录08类与对象类的定义类与结构体类与对象类的成员函数对象做参数09类与对象的使用构造函数析构函数对象数组对象指针this指针const数据保护 08类与对象 类的定义 注意一些符号。 class Student { private: int age; void setAge(int); protected: double height; void setHei...

SongyangJi 746

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2159

STM32F103移植NuttX实战:从零搭建最小系统到串口Shell(附完整配置文件)

本文详细介绍了在STM32F103C8T6开发板上移植NuttX实时操作系统的完整过程,包括环境搭建、BSP配置、系统时钟初始化、驱动裁剪、编译烧录及串口Shell交互。通过实战指南帮助开发者快速掌握NuttX移植技巧,解决典型问题,适用于嵌入式系统开发。

tree8的博客 293

C++类与对象1

C++类与对象(1)

go_bai的博客 751

UCD9081EVM电源时序管理:硬件配置与GUI操作全解析

电源时序管理是复杂电子系统设计的核心环节,它通过精确控制多路电源的上电/下电顺序,确保核心芯片免受浪涌电流或电压倒灌的损害。其原理基于状态机逻辑与电压监控,技术价值在于将硬连线时序转化为可编程配置,极大提升了系统可靠性与设计灵活性。在服务器、通信设备、工控系统等高可靠性应用场景中,时序控制器是实现稳定启动与故障保护的关键。本文以德州仪器UCD9081评估模块为例,深入剖析其硬件跳线配置与图形用户界面操作,涵盖I2C地址设置、电压监控分压计算、时序条件与故障响应策略等工程实践要点,帮助工程师快速掌握这一电源时

weixin_42696271的博客 303

【爱上C++】详解类与对象1

C++类,类的实例化,作用域,大小的计算,this指针

2301_76677973的博客 1800

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2929

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7626

cpp类与对象(中1)

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。对于Date类,可以通过Init公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?是一个,以保证每个数据成员都有 一个合适的初始值,并且。是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任。

z202331720425的博客 855

SAP-MM-采购过账接口(与WMS集成)-代码

1、判断传入值非空检验; 2、判断过账日期是否允许在当前期间; 3、判断是否为集采订单业务,是否审批完成; 4、判断是否发布标准成本发布(此业务场景与价格控制3+S有关) 5、保存日志表; 6、判断业务公司订单审批状态; 7、创建STO交货单、集采公司订单过账、STO公司间创建交货单、交货单过账(两步法)、过账失败回滚(冲销交货、删除交货单、冲销集采入库)

qq_32198063的博客 421

【C++】类与对象1

一. 类的定义一. 类的定义1.类定义格式a.class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。b.为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_ 或者 m开头,注意C++中这个并不是强制的,只是一些惯例,具体看公司的要求。

HEBRE的博客 1036

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++:类与对象(1)

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。

weixin_51142926的博客 3023

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【C++】类与对象(1)

【C++】类与对象(1),重点认识this指针

m0_74215144的博客 729

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【C++那些事儿】类与对象(1)

类与对象中的面向对象思想和类的基本使用方法与细节

君兮_的博客 874

入门C++《类与对象》——1

学完《类与对象》三部曲,我们将会正式两只脚迈进C++的世界,《类与对象》属于是一个第一个全新的模块,与以之前C++入门里的各个知识都不同,不再是C语言的已有知识点的更新,而是一个最重要最关键的C++语法和知识点。对于本章的学习也正是标志着我们将结束“面向过程”从而转向“面向对象”// 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。

weixin_72917087的博客 690

C++:类与对象1

类的定义 例如: class className { }; class为定义类的关键字,className为类的名字,{}中为类的主体,类定义结束时后面加分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数 如何定义一个类 类有两种定义方式,一种是声明和定义都放在类体中,一种是声明放在.h文件中,定义放在.c文件中 用struct定义类和...

碧瑶的博客呀 163

C++类与对象详解-1

本文介绍了C++中"类"的基本概念及其与C语言结构体的区别。类不仅包含成员变量(属性),还包含成员函数(方法)。文章详细讲解了类的定义格式、访问限定符(public/protected/private)的作用,以及类域的概念。通过实例分析说明了类实例化的过程,指出对象只存储成员变量而不存储成员函数。重点解释了this指针的作用机制,它作为隐含参数传递对象地址,使得不同对象调用相同成员函数可以访问各自的成员变量。最后对比了C++类和C结构体实现栈的差异,展示了C++封装特性带来的优势。文章

有且仅有质量分95以上的博客 1007

【C++学习笔记】【基础】1.类与对象(上)

本文介绍了C++面向对象编程中类的基础知识,主要包括:1. 类的定义方式及访问限定符(public/private/protected)的使用;2. 类的实例化过程及对象内存计算规则;3. this指针的原理与特性;4. C与C++实现栈结构的对比,展示了面向对象封装的优势;5. 面向对象三大特性中的封装基础实现。文章还提供了内存对齐计算示例和this指针的经典案例分析,最后介绍了常见的编程命名规范。

2501_90209717的博客 795

cpp从0到1---类与对象1

类与对象

K08e_824的博客 190

C++基础——类与对象1

C++类与对象的定义、访问限定修饰符、封装特性

weixin_69283129的博客 885

C++类与对象(1)—初步认识

C++类与对象(1)—初步认识

Han同学 1996
上一篇: JavaScript可视化
下一篇: Linux系统性能调优技巧
DirectYang
博客等级 码龄3年 1516粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DirectYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值