【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(一)
发布日期:2021-05-07 20:53:14 浏览次数:26 分类:精选文章

本文共 3683 字,大约阅读时间需要 12 分钟。

【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(一)


【1】类基础知识点

在C/C++中,类是用户定义的数据结构,用于将相关的属性和行为封装在一起。类可以有成员变量和成员函数,成员变量用于存储数据,成员函数用于操作数据。类的作用是将复杂的数据和功能包装起来,便于管理和使用。

类的定义语法

#ifndef __MYTIME__#define __MYTIME__class Time {public:    // 成员变量    int Hour;    int Minute;    int Second;    // 成员函数    void initTime(int tmphour, int tmpmin, int tmpsec);private:    // 私有成员变量    int Millisecond;    // 私有成员函数    void initMillTime(int mls);};#endif

类的成员函数实现

#include "Time.h"void Time::initTime(int tmphour, int tmpmin, int tmpsec) {    Hour = tmphour;    Minute = tmpmin;    Second = tmpsec;    initMillTime(0);}void Time::initMillTime(int mls) {    Millisecond = mls;}

类的构造函数

Time::Time(int tmphour, int tmpmin, int tmpsec)     : Hour(tmphour), Minute(tmpmin) {    Hour = tmphour;    Minute = tmpmin;    Second = tmpsec;    initMillTime(0);}Time::Time() {    Hour = 12;    Minute = 59;    Second = 59;    initMillTime(59);}Time::Time(int tmphour, int tmpmin) {    Hour = tmphour;    Minute = tmpmin;    Second = 59;    initMillTime(59);}Time::Time(int tmphour) {    Hour = tmphour;    Minute = 59;    Second = 59;    initMillTime(0);}

【2】类的构造与析构

2.1 类构造函数、explicit 与初始化列表

#ifndef __MYTIME__#define __MYTIME__class Time {public:    Time(int tmphour, int tmpmin, int tmpsec = 12);    explicit Time();    explicit Time(int tmphour);    Time(int tmphour, int tmpmin, int tmpsec);public:    int Hour;    int Minute;    int Second;    void initTime(int tmphour, int tmpmin, int tmpsec);private:    int Millisecond;    void initMillTime(int mls);};#endif

2.2 inline、const、mutable、this 与 static

Time::Time(int tmphour, int tmpmin, int tmpsec)     : Hour(tmphour), Minute(tmpmin) {    Hour = tmphour;    Minute = tmpmin;    Second = tmpsec;    initMillTime(0);}Time::Time() {    // 这里可以选择是否添加 this->Hour = 12;    Hour = 12;    Minute = 59;    Second = 59;    initMillTime(59);}Time::Time(int tmphour, int tmpmin) {    Hour = tmphour;    Minute = tmpmin;    Second = 59;    initMillTime(59);}Time::Time(int tmphour) {    Hour = tmphour;    Minute = 59;    Second = 59;    initMillTime(0);}

【3】类调用

3.1 子类与调用顺序、访问等级、函数遮蔽

class Human {public:    Human();    Human(int age);    void samenamefunc();    void samenamefunc(int);public:    int m_Age;    char m_Name[100];    void funcpub();protected:    int m_pro1;    void funcpor();private:    int m_priv1;    void funcpriv();};

【4】父类与多态性

4.1 父类指针与子类指针、虚函数

class Human {public:    Human();    Human(int age);    virtual ~Human();    virtual void eat();public:    int m_Age;    char m_Name[100];    void funcpub();protected:    int m_pro1;private:    int m_priv1;    void funcpriv();};

4.2 RTTI、dynamic_cast、typeid

#include 
using namespace std;class Human {public: Human(); Human(int age); virtual ~Human(); virtual void eat();public: int m_Age; char m_Name[100]; void funcpub();protected: int m_pro1;private: int m_priv1; void funcpriv();};class Men : public Human {public: Men(); virtual ~Men(); virtual void eat() override;public: void testfunc();};class Women : public Human {public: Women(); virtual ~Women(); virtual void eat() override;};int main() { // RTTI 与 dynamic_cast Human* phuman = new Men; if (dynamic_cast
(phuman)) { cout << "phuman实际指向一个Men类型对象" << endl; } try { Men& mymen = dynamic_cast
(phuman); cout << "myhuman_y实际是一个Men类型" << endl; } catch (bad_cast) { // 转换失败 }}

【5】友元

5.1 友元函数、友元类

// 类B 是类A 的友元类friend class B;// 类B 中的callBAF成员函数是类A 的友元成员函数friend void B::callBAF(int x, A& a);

5.2 友元成员函数

void B::callBAF(int x, A& a) {    a.data = x;    cout << a.data << endl;}

参考致谢

本文内容参考自C++新经典和C++11/14高级编程书籍,感谢相关作者的贡献。

上一篇:【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(二)
下一篇:【C/C++基础进阶系列】C/C++ 基础知识 -- C++ 面向过程新特性与关键知识点总结(二)

发表评论

最新留言

不错!
[***.144.177.141]2025年05月08日 02时08分23秒