学习C++ -> 类(Classes)的定义与实现

从零开始:Doherty功率放大器的ADS仿真实践指南 本文详细介绍了Doherty功率放大器在ADS中的仿真设计流程,从基础原理到实际工程应用。通过负载调制技术,Doherty结构显著提高了功率放大器的效率,特别适合处理高峰均比信号。文章包含ADS环境搭建、对称与非对称设计、常见问题调试等实用内容,为射频工程师提供全面的实践指南。 阅读详情

一、"类" 的介绍
    在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于该对象具有的行为, 也称方法。
    
    类是属于用户自定义的数据类型, 并且该类型的数据具有一定的行为能力, 也就是类中说描述的方法。通常来说, 一个类的定义包含两部分的内容, 一是该类的属性, 另一部分是它所拥有的方法。以 "人类" 这个类来说, 每个人都有自己的姓名、年龄、出生日期、体重等, 为 人类 的属性部分, 此外, 人能够吃饭、睡觉、行走、说话等属于人类所具有的行为。
    
    上面举例中所描述的 "人" 类仅仅是具有人这种对象的最基础的一些属性和行为, 可以称之为人的"基类"。 再说说一些具有一些职业的人, 例如学生, 一个学生还具有"基类"中所没有的属性, 如学校、班级、学号; 也可以具有基类所不具有的行为, 如每天需要去上课, 需要考试等。
    
    学生类可以看做是基类的一个扩展, 因为他具有基类的所有属性和行为, 并且在此基础上增加了一些基类所没有的属性和行为, 像"学生"这样的类称为"人类"这个基类的"派生类"或者"子类"。在学生的基础上海可以进一步的扩展出其他更高级的类, 如"研究生"类。
   
    到此, 我们不再更深的去介绍类的其他相关知识。
    
    


    
二、C++类的定义
    C++中使用关键字 class 来定义类, 其基本形式如下:

复制代码
    class 类名
    {
        public:
            //公共的行为或属性

        private:
            //公共的行为或属性
    };
复制代码

 
    说明:
        ①. 类名 需要遵循一般的命名规则;
        
        ②. public 与 private 为属性/方法限制的关键字, private 表示该部分内容是私密的, 不能被外部所访问或调用, 只能被本类内部访问; 而 public 表示公开的属性和方法, 外界可以直接访问或者调用。
            一般来说类的属性成员都应设置为private, public只留给那些被外界用来调用的函数接口, 但这并非是强制规定, 可以根据需要进行调整;
            
        ③. 结束部分的分号不能省略。
        
        
    类定义示例:
        定义一个点(Point)类, 具有以下属性和方法:
            ■ 属性: x坐标, y坐标
            ■ 方法: 1.设置x,y的坐标值; 2.输出坐标的信息。

        实现代码如下:

复制代码
            class Point
            {
                public:
                    void setPoint(int x, int y);
                    void printPoint();

                private:
                    int xPos;
                    int yPos;
            };
复制代码

           
    代码说明:
        上段代码中定义了一个名为 Point 的类, 具有两个私密属性, int型的xPos和yPos, 分别用来表示x点和y点。在方法上, setPoint 用来设置属性, 也就是 xPos 和 yPos 的值; printPoint 用来输出点的信息。
        
        类在定义时有以下几点需要注意:
            ①. 类的数据成员中不能使用 auto、extern和register等进行修饰, 也不能在定义时进行初始化, 如 int xPos = 0; //错;
            ②. 类定义时 private 和 public 关键词出现的顺序和次数可以是任意的;
            ③. 结束时的分号不能省略, 切记!
            
            


            
三、C++类的实现
    在上面的定义示例中我们只是定义了这个类的一些属性和方法声明, 并没有去实现它, 类的实现就是完成其方法的过程。类的实现有两种方式, 一种是在类定义时完成对成员函数的定义, 另一种是在类定义的外部进行完成。
    
    1>. 在类定义时定义成员函数
        成员函数的实现可以在类定义时同时完成, 如代码:

复制代码
 1         #include <iostream>
 2 
 3         using namespace std;
 4 
 5         class Point
 6         {
 7             public:
 8                 void setPoint(int x, int y) //实现setPoint函数
 9                 {
10                     xPos = x;
11                     yPos = y;
12                 }
13 
14                 void printPoint()       //实现printPoint函数
15                 {
16                     cout<< "x = " << xPos << endl;
17                     cout<< "y = " << yPos << endl;
18                 }
19 
20             private:
21                 int xPos;
22                 int yPos;
23         };
24 
25         int main()
26         {
27             Point M;        //用定义好的类创建一个对象 点M
28             M.setPoint(10, 20); //设置 M点 的x,y值
29             M.printPoint();     //输出 M点 的信息
30 
31             return 0;
32         }
复制代码

 
        运行输出:

        x = 10
        y = 20

        Process returned 0 (0x0)   execution time : 0.406 s
        Press any key to continue.

 
        与类的定义相比, 在类内实现成员函数不再是在类内进行声明, 而是直接将函数进行定义, 在类中定义成员函数时, 编译器默认会争取将其定义为 inline 型函数。
        
        
    2>. 在类外定义成员函数
        在类外定义成员函数通过在类内进行声明, 然后在类外通过作用域操作符 :: 进行实现, 形式如下:

        返回类型 类名::成员函数名(参数列表)
        {
            //函数体
        }

       
        将示例中的代码改用类外定义成员函数的代码:

 

复制代码
 1         #include <iostream>
 2 
 3         using namespace std;
 4 
 5         class Point
 6         {
 7             public:
 8                 void setPoint(int x, int y); //在类内对成员函数进行声明
 9                 void printPoint();
10 
11             private:
12                 int xPos;
13                 int yPos;
14         };
15 
16         void Point::setPoint(int x, int y) //通过作用域操作符 '::' 实现setPoint函数
17         {
18             xPos = x;
19             yPos = y;
20         }
21 
22         void Point::printPoint()       //实现printPoint函数
23         {
24             cout<< "x = " << xPos << endl;
25             cout<< "y = " << yPos << endl;
26         }
27 
28         int main()
29         {
30             Point M;        //用定义好的类创建一个对象 点M
31             M.setPoint(10, 20); //设置 M点 的x,y值
32             M.printPoint();     //输出 M点 的信息
33 
34             return 0;
35         }
复制代码

       
        依 setPoint 成员函数来说, 在类内声明的形式为 void setPoint(int x, int y); 那么在类外对其定义时函数头就应该是 void Point::setPoint(int x, int y) 这种形式, 其返回类型、成员函数名、参数列表都要与类内声明的形式一致。
        
        

 


四、C++类的使用
    将一个类定义并实现后, 就可以用该类来创建对象了, 创建的过程如同 int、char 等基本数据类型声明一个变量一样简单, 例如我们有一个Point类, 要创建一个Point的对象只需要:

        Point 对象名;


    创建一个类的对象称为该类的实例化, 在创建时我们还可以对对象的属性进行相关的初始化, 这样在创建完成后该对象就已经具有了一定得属性, 这种创建方式将在下一篇博文中进行学习。
    将类进行实例化后系统才会根据该对象的实际需要分配一定的存储空间。这样就可以使用该对象来访问或调用该对象所能提供的属性或方法了。
    
    还以上面的代码为例, 为了减少篇幅, 我们把 Point 类的实现放在 Point.h 头文件中, 这里不再贴出 Point 类的实现代码。
    

复制代码
 1     #include <iostream>
 2     #include "Point.h"
 3 
 4     using namespace std;
 5 
 6     int main()
 7     {
 8         Point M;        //用定义好的类创建一个对象 点M
 9         M.setPoint(10, 20);         //设置 M点 的x,y值
10         M.printPoint();             //输出 M点 的信息
11         cout<< M.xPos <<endl;       //尝试通过对象M访问属性xPos
12 
13         return 0;
14     }
复制代码

 
    代码在编译时会出现错误, 提示 error: 'int Point::xPos' is private, 这是 cout<< M.xPos <<endl; 这行造成的, 他试图访问一个 private 对象中的私密数据 xPos, 如果将这行去掉便可正常运行。
    
    通过 对象名.公有函数名(参数列表); 的形式就可以调用该类对象所具有的方法, 通过 对象名.公有数据成员; 的形式可以访问对象中的数据成员。
    
    

 


五、对象的作用域、可见域与生存周期
    类对象的作用域、可见域以及生存周期与普通变量的保持相同, 当对象生存周期结束时对象被自动撤销, 所占用的内存被回收, 需要注意的是, 如果对象的成员函数中有使用 new 或者 malloc 申请的动态内存程序不会对其进行释放, 需要我们手动进行清理, 否则会造成内存泄露。
    
    


    
--------------------



wid, 2013.02.18

Cadence16.6安装教程 如需安装所需的软件,请到文章末尾处查看 安装步骤: 安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 试装系统:win10 64bit 1.解压安装包(共5个压缩包,每个都要解压) 2.以管理员身份运行安装程序。 3.选择License Manager。 4.点击NEXT。 5.选择I accept,然后点击NEXT。 6.选择License Manage... 阅读详情

相关推荐

基于FPGA的TDC延迟链优化与码密度校准方法(1)——原理与实现

本文深入探讨了基于FPGA的时间数字转换器(TDC)延迟链非均匀性问题及其码密度校准方法。通过分析工艺偏差、温度电压影响等根源,详细介绍了码密度测试原理、逐位校准技术及气泡消除算法,并分享了自适应校准策略与多场景应用实践,有效提升TDC测量精度至皮秒级。

kiwi8的博客 488

cpp-类

类的声明格式 访问修饰符 类的一个特征就是封装,public和private作用就是实现这一目的。用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。 类的另一个特征就是继承,protected的作用就是实现这一目的。protected成员可以被派生类对象访问,不能被用户代码(类外)访问。 类的继承方式 public继承 基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public,

hit_Wan 1184

Proteus仿真实战:用AT89C51+L298N搭建直流电机PID调速系统(附完整工程文件)

本文详细介绍了使用Proteus仿真平台结合AT89C51单片机和L298N驱动模块搭建直流电机PID闭环调速系统的全过程。从硬件选型、电路连接到PID算法实现与参数整定,提供了完整的开发指南和工程文件,帮助读者快速掌握闭环调速系统的设计与调试技巧。

weixin_28724661的博客 448

3、CPP面向对象之—— 类、对象(封装),继承

面向对象一、面向对象1、类和对象2、对象内存3、this4、封装二、内存空间1、内存空间2、堆内存堆空间的初始化3、成员变量的初始化三、构造函数(constryctor)1、构造函数的调用四、析构函数(Destructor)1、内存清理五、程序优化1、声明和实现分离2、命名空间怎么使用命名空间?思考命名空间的嵌套、合并六、继承1、继承的内存布局2、成员访问权限、继承方式七、初始化列表1、思考:初始化列表的本质2、思考:**初始化的先后顺序**3、初始化列表与默认参数配合使用八、再论构造函数1、构造函数的互相

vincent3678的博客 3302

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1378

分享一个N-MOS管和P-MOS管驱动应用实例

大家好,我是『芯知识学堂』的SingleYork,今天给大家分享一下MOS管驱动相关的知识。 MOS管在电路设计中是比较常见的,按照驱动方式来分的话,有两种,即:N-MOS管和P-MOS管。MOS管跟三极管的驱动方式有点类似,但又不完全相同,那么今天笔者将会给大家简单介绍一下N-MOS管和P-MOS管的工作原理,并结合自己实际的应用来给大家分享一下如何来驱动N-MOS管和P-MOS管。 首先,我们先来看一下N-MOS管和P-MOS管分别在电路中的电气符号: 咋一看上面两个电气符号,似乎非常的相似,可能让很

『芯知识学堂』SingleYork 的博客 3万+

初始Cpp之 八、类和对象

​ C++面向对象的三大特性:封装、继承和多态。​ 封装的意义在于:基本语法:或者实例化,通过类创建类的实例语法:,可以通过==成员访问符==来访问类中的属性和方法。示例: ​ 封装的权限设置:类在设计时,可以把属性和方法放在不同的权限下加以控制。访问权限有三种:​ 在C++中,和的区别:唯一的区别在于默认的访问权限不同,默认的访问权限;而默认访问权限为。​ 将类的成员属性设置为私有:举个例子: (2)对象的初始化和清理 ​ 对象的初始化和清理是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用

Shen Mu Xin's Blog 1757

流体仿真软件:COMSOL Multiphysics二次开发_(11).COMSOL与外部软件的数据交换

通过上述方法,您可以实现 COMSOL Multiphysics 与外部软件的数据交换,从而更好地集成和分析仿真结果。无论是从文本文件导入数据,导出数据到 MATLAB,还是通过 API 和 COMSOL Server 实现实时通信,都能满足不同场景下的需求。希望这些内容对您在流体仿真领域的开发工作有所帮助。

kkchenjj的博客 1552

CPP:类和对象

cpp类和对象知识点

weixin_54832720的博客 969

【GameFramework扩展应用】6-5、GameFramework框架出包时增加版本信息Version.txt文件

框架在热更新的时候,会先去获取文件,然后获取版本号,对比版本号和资源大小,才会开始下载资源。但是,框架生成AssetBundle资源的包里面是没有这个文件的,只能我们新建一个文件,然后手动填入数据,非常麻烦。好消息是,框架把这些接口都留给我们了,我们只需要继承接口,重写函数,然后在打包的时候选择这个辅助器即可。下面就来看一下如何实现把。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1037

基于多头注意力时间卷积网络(MATCN)的虚拟电厂短期功率预测模型

​时空特征解耦​:TCN负责时间模式,注意力捕捉空间关联​动态门控机制​:自适应调整两种特征的融合比例​多尺度感知​:膨胀卷积覆盖5分钟到24小时的时间跨度​轻量化设计​:参数量比传统Transformer减少52%

hasakie的博客 322

Cpp03 — 类和对象、this指针

C++

weixin_60320290的博客 660

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

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

学习C++ -> 类(Classes)的定义与实现(转)

一、"类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做...

Edeyan1022的博客 142

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【转载】学习C++ -> 类(Classes)的定义与实现

一、"类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量、都有两个轮子, 都是属于交通工具等。"都有质量"、"两个轮子"属于这个对象的属性, 而"都能够当做交通工具"属于...

weixin_34125592的博客 96

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

细说 C++ Traits Classes

最近在看侯捷的《STL源码剖析》,看到第三章有关 traits 的介绍,被搞得一头雾水,看了半天不知所云。为了彻底了解这个技法的原理,硬着头皮上网查了资料,并结合 Scott Meyers 的 《Effective C++》,总算是把 traits 的原理搞明白了:)什么是 traits?我们先来看下 C++ 之父的回答: Think of a trait as a small object w

Leo的博客 2万+
上一篇: Ubuntu系统安装搜狗(sougou for linux)输入法详细教程
下一篇: gcc编译C++程序
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值