【C++】类与对象

C++类与对象上 / 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体注意类定义结束时后面分号不能省略类体中内容称为类的成员:类中的变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数1.声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注:成员函数名前需要加类名::一般情况下,更期望采用第二种方式。 阅读详情

类的声明

class 类名称
{
public:
   公有成员(外部接口)
private:
   私有成员
protected:
   保护成员
};

/*Clock.h
*实现简单的时钟类,变量包括时分秒
*/
#ifndef _CLOCK_H
#define _CLOCK_H
class Clock
{
public:
    void Display();  //显示时分秒
    void Init(int hour,int minute,int second);//输入时间

    void Update(); //更新时间

    int getHour_(); //得到时
    int getMinute_(); //分
    int getSecond_(); //秒

    void setHour_(int hour);  //输入 时
    void setMinute_(int minute); //分
    void setSecond_(int second); //秒

private:
    int     hour_;
    int     minute_;
    int     second_;

};
#endif
/*Clock.cpp
*各函数的具体实现
*/
#include "Clock.h"
using namespace std;

void Clock::Display()
{
    cout << hour_ << ":" << minute_ << ":" << second_  << endl;
}
void Clock::Init(int hour,int minute,int second)
{
    hour_ = hour;
    minute_ = minute;
    second_  = second;
}
void Clock::Update()
{
    second_ ++;
    if(second_ == 60)
    {
        minute_ ++;
        second_ = 0;
    }
    if(minute_ == 60)
    {
        hour_ ++;
        minute_ = 0;
    }
    if(hour_ == 24)
    {
        hour_ = 0;
    }
}
int Clock::getHour_()
{
    return hour_;
}

int Clock::getMinute_()
{
    return minute_;
}
int Clock::getSecond_()
{
    return second_;
}

void Clock::setHour_(int hour)
{
    hour_ = hour;
}
void Clock::setMinute_(int minute)
{
    minute_ = minute;
}
void Clock::setSecond_(int second)
{
    second_ = second;   
}
#include "Clock.h"
//using namespace std;

int main()
{
    Clock c;
    c.Init(10,10,10);
    c.Display();

    /*当把变量设为私有后,外部函数不能访问该变量*/
    //c.second_ += 1;  
    /*定义接口函数*/
    c.Update();

    /*访问变量*/
    c.Display();

    //c.getMinute_(); 
    c.setHour_(12);
    c.Display();
    return 0;
}

公有、私有、保护成员

public:它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数

private:只允许本类中的函数访问,而类外部的函数不能访问

protected:与private类似,其差别表现在继承与派生时对派生类的影响不同

数据抽象和封装

  类设计者必须关心类是如何实现的;使用者只要抽象地考虑该类型做什么,而不必具体地考虑该类内部是怎么实现的,只要类所提供的接口不变,那么对类使用者所写的代码就是稳定的。
  封装是一项将低层次的元素组合起来形成更高层次的实体的技术。函数是封装的一种形式:函数所执行的细节行为被封装在函数这个更大的实体中。被封装的元素隐藏了它们的实现细节--可以调用函数,但是不能直接访问函数所执行的语句。类也是一个封装的实体:它代表若干成员的聚集,设计良好的类隐藏了类实现的细节。

内联成员函数

内联函数的两种实现方式:
1.在成员函数具体实现时,在返回类型前加  **inline** 关键字
/*Test.cpp*/
#include "Test.h"
using namespace std;
inline int Test::Add(int a,int b)
{
    return a + b;
}
2.直接在类体中给出实现
class Test{
public:   //内联函数第二种定义方式
    int Add(int a,int b)
    {
        return a + b;
    }
};
成员函数的重载
/*类的声明*/
#ifndef _TEST_H
#define _TEST_H

class Test{
public:
    /*构成重载*/
    void Init();
    void Init(int x);
    void Init(int x,int y);
    void Init(int x,int y,int z);

    void Display();

private:
    int x_;
    int y_;
    int z_;
};
#endif
/*成员函数的具体实现*/
void Test::Init()
{
    x_ = 0;
    y_ = 0;
    z_ = 0;
}
void Test::Init(int x)
{
    x_ = x;
    y_ = 0;
    z_ = 0;
}
void Test::Init(int x,int y)
{
    x_ = x;
    y_ = y;
    z_ = 0;
}
void Test::Init(int x,int y,int z)
{
    x_ = x;
    y_ = y;
    z_ = z;
}
void Test::Display()
{
    cout << "x=" << x_ << endl;
    cout << "y=" << y_ << endl;
    cout << "z=" << z_ << endl;
}
/*主函数*/
#include "Test.h"

using namespace std;
int main()
{
    Test t;
    t.Init();
    t.Display();
    t.Init(10);
    t.Display();
    return 0;
}
/*输出:*/
x=0
y=0
z=0
x=10
y=0
z=0
附:成员函数可以有默认缺省值

class 与 struct 的区别

在未指定访问权限时,class默认的是私有的,struct 默认是公有的
struct Test1
{
    int x_;
    int y_;
    void Init(int x,int y)
    {
        x_ = x;
        y_ = y;
    }
    void Display()
    {
        cout << x_ << "," << y_ <<endl;
    }
};
class Test2
{
    int x_;
    int y_;
    void Init(int x,int y)
    {
        x_ = x;
        y_ = y;
    }
    void Display()
    {
        cout << x_ << "," << y_ <<endl;
    }
};
int main()
{
    Test1 test1;
    Test2 test2;
    /*结构体*/
    test1.Init(10,10);
    test1.Display();

    /*类--默认是私有 所以error*/
    //test2.Init(20,20);
    //test2.Display();

    return 0;
}

前向声明

C++ 中类必须先定义,才能够实例化。
两个类需要相互引用形成一个"环形"引用时,无法先定义使用。这时候需要用到前向声明。
#ifndef _前向声明A_H
#define _前向声明A_H

#include "前向声明B.h"  //用到B类对象所以包含头文件
class A
{
public:
    A(void);
    ^A(void);

    B b_;
};
#endif
/*A.h用到B.h,B.h也用到A.h,这是错误的,这时候就要用到前向声明*/
#ifndef _前向声明B_H
#define _前向声明B_H
//#include "前向声明A.h"     前向声明后,头文件不需要包含头文件
class A;  
class B
{
public:
    B(void);
    ^B(void);

/*类B中也用到A类对象,这就是环形引用*/
    A a_;//error :不能实例化对象,也不能用作参数,能定义指针或引用
};

#endif

局部类(一般很少使用)

1.类也可以定义在函数体内,这样的类称为局部类。
2.局部类只在定义它的局部域内可见
3.局部类只能在定义它的函数内部实现和使用,即在函数内有效
4.局部类内部不能定义静态成员。
void Fun()
{
    class LocalClass
    {
    public:
        int num_;
        void Init(int num)
        {
            num_ = num;
        }
        void Display()
        {
            cout << num_ << endl;
        }   
        static int num2_; //error 局部类内不能定义静态成员
    };
    /*函数体内部使用*/    
    LocalClass lc;
    lc.Init(10);
    lc.Display();
}

int main()
{
    Fun();
    //LocalClass lc; error 局部类只能在函数体中使用
    return 0;
}
[C++中类与对象 cpp] -> C++面向对象编程进阶:深入学习类与对象 在C++中,我们需要使用class关键字来定义一个类。类的定义包含了类的成员变量和成员函数。成员函数可以是公有(public)的、私有(private)的或受保护(protected)的。公有成员可以在类外部被访问,私有成员只能在类内访问,受保护成员可以在类及其子类中访问。public:// 公有成员函数private:// 私有成员变量int age; 阅读详情

相关推荐

电机控制必看!SVPWM谐波优化:5段式与7段式全参数对比测试

本文通过实测数据,对比分析了电机控制中5段式与7段式SVPWM控制算法的谐波性能。实验表明,7段式SVPWM在电流波形质量(THD)和低速性能上更优,而5段式SVPWM则在开关损耗和效率方面表现突出。文章为工程师在不同应用场景(如对噪音、效率或动态响应的侧重)下的算法选型提供了清晰的依据和实用的工程指南。

weixin_28331555的博客 177

C++类与对象

从栈中实例化对象,使用完之后系统会自动回收这块内存。从堆中实例化对象,使用完之后必须将其内存释放掉~#include <iostream>#include <stdlib.h> using namespace std; class Location { public : int x; int y; void printX() {

liuzp111的专栏 508

机器学习教程 之 半监督学习 Co-training 协同训练 (论文、算法、数据集、代码)

这篇博客介绍的是一篇用于半监督分类问题的方法: 协同训练 Co-training, A. Blum and T. Mitchell, “Combining labeled and unlabeled data with co-training,” in Proc. of the 11th Annual Conf. on Computational Learning Theory, 1998.,这算是半监督领域里面始祖级的论文了,是1998年两位CMU大佬提出的方法。 之前还写过一篇关于Tri-trainin

冯良骏 的 博客 1万+

C++经典习题

1、  设计一个立方体类BOX,它能计算并输出立方体的体积和表面积。   提示:定义一个BOX类,含有一个私有数据成员(立方体边长length),有两个公有数据函数(构造         函数Box和计算输出函数show)/** * 立方体类 * 作者:hellostory * 日期:2010-11-23 */ #include using namespace std; class Box { private: double length; //立方体边长 doubl

hellostory的专栏 1万+

ADS实战指南:负载牵引(Loadpull)在射频功放设计中的关键应用

本文深入解析了负载牵引(Loadpull)技术在射频功率放大器设计中的核心作用与实战方法。通过生动的比喻和详细的ADS软件操作指南,阐述了如何通过系统扫描负载阻抗,在史密斯圆图上绘制等功率线与等效率线,从而精准找到最优阻抗点,以平衡输出功率与效率,是应对5G等现代通信系统严苛要求的必备技能。

weixin_29198045的博客 601

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 87

C++初阶——类与对象(上篇)

与C语言中存在的结构体不同,在类中,不仅可以定义变量,还可以定义函数。在C++中,使用class作为定义一个类的关键字。class body;//由成员变量和成员函数组成。class作为定义类的关键字,className为类的名字,{}中为类的主体,注意类定义结束后存在一个不可省略的分号。类体中的内容称为类的成员,类中的变量称为类的属性或者成员变量;类中函数被称为类的方法或者成员函数。成员函数的声明和定义全部放在类体中,需要注意的是,这种写法会导致编译器将成员函数当作内联函数处理。

qq_55890817的博客 2896

EMGPro 肌肉电手势识别手环传感器

EMG手势识别技术需要进行多方面的工作,包括传感器的设计和布局、EMG信号的采集和预处理、特征提取和分类等。通过对采集到的信号进行特征提取和分类,可以将手势信号与预定义的手势模型进行匹配,从而实现手势识别和控制。通过使用EMG手势识别技术,用户可以更加自由地操纵设备,使得我们的交互方式更加智能和自然。EMG手势识别是利用EMG信号测量肌肉运动的实时性和高精度性,采用机器学习等技术进行数据处理和分析,并将其应用于手势识别领域的一种技术。

m0_68593468的博客 1385

C++初阶学习第三弹——类与对象(上)——初始类与对象

C++类与对象部分超详解!!!(新手可入)(上)

2301_80220607的博客 5991

电流模架构Bandgap设计与仿真

带隙基准作为集成电路中一个重要模块,被广泛应用在低压差线性稳压(LDO)、充电电池保护芯片和通信电路、射频收发器、flash存储器等多种模拟及数模混合集成电路中,并且是片上集成系统(SOC)芯片中不可或缺的部分,为整个芯片提供精确的电压参考点............

qq_50968231的博客 5万+

(14-3)值分布式算法:QR-DQN (Quantile Regression DQN)算法

QR-DQN(Quantile Regression DQN)是一种强化学习算法,它是深度 Q-网络(Deep Q-Network,DQN)的一个变种,旨在更好地处理值函数的不确定性。QR-DQN的实现步骤与传统的DQN类似,但在目标分布计算和损失函数方面有一些不同之处,这使得它能够更好地处理值函数的不确定性。QR-DQN(Quantile Regression DQN)算法的核心思想是将值函数表示为一个分布,而不是传统的单一值估计。在下面的内容中,将讲解一个使用QR-DQN算法的例子。

码农三叔 2052

【C++】类与对象-1

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

Demon___1的博客 1447

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

网络技术联盟站 1906

【C++】类与对象的初步认识

本文介绍C++类与对象相关知识。C++中类通过`class`定义,成员含变量与函数,定义方式有声明定义全放类体中、声明放`.h`文件成员函数定义放`.cpp`文件两种。类的访问限定符有`public`、`protected`、`private`,实现封装。类有独立作用域,实例化是创建对象过程。类对象大小由成员变量决定,空类占1字节。`this`指针是成员函数隐藏参数,指向当前对象,类型为类类型* const,只能在成员函数内使用。掌握这些可助于用C++进行面向对象编程。

2403_87856518的博客 1701

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++类与对象(上)

C++类定义通过class关键字实现,类成员包括变量(属性)和方法(函数),访问权限由public/private控制。与C结构体不同,类支持封装和函数定义。类实例化时仅分配成员变量内存,成员函数被所有对象共享。this指针隐式传递对象地址,使方法能区分不同实例。类域概念要求外部定义成员函数时使用::指明所属类。类作为抽象设计图,实例化后才创建具体对象并分配存储空间。

2302_79963723的博客 1057

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c++类与对象

每一个实体都是对象。有一些对象是具有相同的结构和特性的。每个对象都属于一个特定的类型。在C++中对象的类型称为类(class )。类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例(instance)。 正如同结构体类型和结构体变量的关系一样,人们先声明一个结构体类型,然后用它去定义结构体变量。同一个结构体类型可以定义出多个不同的结构体变量。 在C然后++中也是先声明一个类类型,用它去定义若干个同类型的对象。对象就是类类型的一个变量。可以说类是对象的模板,是用来定义对象的一种抽象类型。类是

一怀明月的博客 1189

怀旧版电脑GBC模拟器

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

CPP类与对象总结(详细易懂)

Cpp中的类与对象总结。 很多人对C语言与cpp语言的区别的解释为:c语言是面向过程的,而c++是面向对象的。当然也有大佬反对这句话,但不管怎样,都可以看出面向对象是c++的一大重要特征,甚至很多c++课程将面向对象的课程称之为“c++”核心编程。关于这一方面的总结csdn上也有很多,我相信我的总结并不会比他们详细。但我希望以一个学习者的角度来解释这一看似复杂高深的内容,可以让大家获益。很多内容均来自个人的学习笔记与课程笔记。 类与对象概述: 提到类,首先想到“class”,class作为类的声明,有

qq_49405576的博客 1663

C++【类与对象】

C++【类与对象】

m0_59292239的博客 3032

cpp类与对象

类(class)是C++有别于C语言的最重要的概念之一,正是因为有了类的概念,C++才拥有了所谓面向对象(OOP,即Object Original Programming)的编程模式可以理解为功能更强大的结构体。

2401_84538914的博客 385

C++ 类与对象

C++ 类与对象

墨上烟雨 8008

C++的类与对象详细讲解

类在C++中用class这个关键字来定义。访问权限属性和行为。访问权限,顾名思义,决定了能否访问类中的一些变量和函数,和C语言中的指针有重合也有不同,C语言的指针通过类型的不同,使得访问的地址内容有所区别。在C++中,访问权限由几个关键字决定。属性,你可以想象一个苹果有颜色、重量、体积等等,这些就是它的属性。在C++中,属性用变量来表示。行为,每个事物都有一些行为,比如人,会走路、会吃饭。在C++中,行为由函数实现。//访问权限public://属性int num;//行为。

江塘的博客 1874

CPP 类与对象相关概念

本文详细介绍了 CPP 中的类与对象的相关概念,并提供了大量的代码示例。

我要出家当道士 1250

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

本文深入探讨了C++类与对象的关键高级特性,包括初始化列表、类型转换、静态成员、友元和内部类等核心概念。

suxi_na的博客 5578

C++类与对象总结

Auto:语法糖 高耦合: 类内部的管理 低类聚: 类与类之间的通讯接口 nullptr:空定义 类型:void* 类与对象的认知: 类与对象的初步认识 类的引入 C++更常用class代替 C语言中,结构体只能定义变量,在C++中,结构体不仅可以定义变量,也可以定义函数 类的定义 类的定义 类名,成员变量,成员函数 两种定义方式(hpp ; .h与 .cpp) class c...

WKH 400
上一篇: 【C++】面向对象程序设计
下一篇: 【C++】类和对象二
Tanswer_
博客等级 码龄11年 231粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值