
【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
#includeusing 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高级编程书籍,感谢相关作者的贡献。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月08日 02时08分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Win10禁用自带的笔记本键盘
2019-03-16
insmod模块的几种常见错误
2019-03-16
写时复制集合 —— CopyOnWriteArrayList
2019-03-16
什么是redis的缓存雪崩, 穿透, 击穿?
2019-03-16
【转载】DSP基础--定点小数运算
2019-03-16
idea thymeleaf页面变量报错解决
2019-03-16
云游戏,打响5G第一战
2019-03-16
Docker 拉取镜像速度太慢
2019-03-16
【毕设-STM32f103寄存器版本】智能防盗系统
2019-03-16
勒索病毒Kraken2.0.7分析
2019-03-16
MySQL错误1366处理方法
2019-03-16
驱动程序之_1_字符设备_13_USB设备_1_基本概念
2019-03-16
微机原理 6-计算机中常用的数制
2019-03-16
window系统下安装使用curl命令工具
2019-03-16
假如计算机是中国人发明的,那代码应该这么写
2019-03-16
神器 Codelf !
2019-03-16
趣图:会算法和不会算法的区别
2019-03-16
区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》
2019-03-16
问题解决28:微信网页授权出现redicet_uri 参数错误
2019-03-16