C++类

2023-10-27

一个简单的类

定义一个类

class MyClass             //类名
{
public:                  //访问修饰符    
	MyClass();       //构造函数    
	~MyClass();      //析构函数    
	void function(); //成员函数,也叫成员方法
private:    
	int m_data;     //成员数据
};                      //不要忘了花括号后的分号

使用类

MyClass mc;	//定义一个对象
mc.function();	//调用对象方法

六个的默认成员函数

构造函数、析构函数、拷贝构造函数、赋值运算符函数、取址运算符函数、const取址运算符函数。

类的成员函数

一般来说,声明在类内的函数称为类的成员函数。
当成员函数的定义在类内时,我们称这个函数为内联成员函数。编译时,编译器将程序中出现的内联函数的调用表达式,用内联函数的函数体进行替换。
成员函数有一个隐藏参数,this指针(除了静态成员函数)。

类的访问修饰符

类的成员在类内、友元函数|类、类外、派生类中的访问权限。Ps: √可以访问;×不可访问。

类内和友元 类外 派生类
公有成员(public)
保护成员(protected) ×
私有成员(private) × ×

构造函数&析构函数

构造函数
在创建对象时调用;主要用于初始化成员变量,但最好使用 初始化列表 来初始化。同时,构造函数不能为虚函数,因为虚表是在构造函数中创建或更新的。
析构函数
在销毁对象时调用;主要用于释放资源,比如关闭文件、释放内存。

拷贝构造函数

使用之前创建的同一类型对象初始化新创建的对象。
使用场景:
1、创建新对象。显示拷贝
2、函数形参。隐式拷贝
3、函数返回值。

隐式拷贝 拷贝构造函数的一般形式

classname(const classname &obj)
 {
   //构造函数的主体
 }

友元函数

友元函数定义在类的外部,但有权访问类的所有成员。尽管友元函数在类中有声明,但友元函数不是成员函数,更没有类的this指针。

给类添加友元

friend void fun();    //友元函数
friend class MyClass; //友元类

内联函数

引入内联函数的目的是为了解决程序中函数调用的效率问题。程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式,用内联函数的函数体进行替换。而对于其他的函数,都是在运行时候才被替代。这其实就是以空间换时间。所以内联函数一般都是1-5行的小函数。

this指针

每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。

继承

通过继承,派生类就拥有了基类的大部分成员。
注意,基类中的这些成员不会被派生类继承。
1、基类的构造函数、析构函数和拷贝构造函数。
2、基类的重载运算符。
3、基类的友元函数。

同时,派生类不能直接访问基类的私有成员,但可以通过基类公有或保护成员间接访问。

一个简单的继承

class ChildClass: public ParentClass

ChildClass为派生类(或子类),ParentClass为基类(或父类)。public为继承类型。

继承方式有三种,public、protected、private。默认为private。它们相应地改变了基类成员的访问修饰符。

继承方式 基类public成员 基类protected成员 基类private成员
public继承 public protected private(不可访问)
protected继承 protected protected private(不可访问)
private继承 private private private(不可访问)

Ps:无论哪种继承方式,基类中私有成员在派生类中都不可访问。

重载运算符和重载函数

同一作用域内,一堆相似的操作,仅仅传入参数不同,这时就需要重载。

函数重载
只需函数名相同,参数不同(类型、顺序、个数),就构成了重载。
运算符重载
Box operator+(const Box&);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++类 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • NDK 应用 onDestroy 清理 - 如何 DetachCurrentThread

    因此 如果我们连接 我们必须在完成后分离线程 对吗 JNIEnv get jni env JNIEnv res JAVA VM gt GetEnv void res JNI VERSION 1 6 Using cached JavaVM J
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 如何减少 MinGW g++ 编译器生成的可执行文件的大小?

    我有一个简单的 Hello world C 程序 在 Win XP 下由 MinGW g 编译器编译为 500kB 可执行文件 有人说这是由于iostream的库和静态链接libstdc dll Using s链接器选项有点帮助 减少了 5
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 您对“大规模 C++ 软件设计”的看法 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 正在阅读亚马逊评论 https rads stackoverflow com amzn click com 0201633620 and ACC
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 在windows + opengl中选择图形设备

    我知道如何使用 openGL 打开窗口 使用 Win32 或其他工具包 但是当系统有2块显卡时 如何选择要渲染的图形设备 我的编程语言是 C 我专注于 Windows 但任何示例都将受到欢迎 编辑 也许更好地解释我的问题是个好主意 以便添加

随机推荐