C++语法小记---经典问题之一(一个空类包含什么)

问题:一个空类包含什么

  • 空的构造函数
  • 拷贝构造函数(浅拷贝)
  • 重载赋值操作符函数(浅拷贝)
  • 析构函数
  • 取址运算符
  • 取址运算符const

注意

  • 所有的这些默认函数,只有在代码中调用了才会生成,否则也不会生成

例子

 1 class Test1
 2 {
 3
 4 };
 5
 6 // Test1等价于Test2
 7
 8 class Test2
 9 {
10 public:
11     Test2()                                    // 空的构造函数
12
13     Test2(Test2& t)                            // 拷贝构造函数(浅拷贝)
14
15     Test2& operator=(const Test2& other)    // 重载赋值操作符函数(浅拷贝)
16
17     Test2* operator & ();                      // 取址运算符
18
19     const Test2* operator & () const;       // 取址运算符const
20
21     ~Test2()                                // 析构函数
22 };

原文地址:https://www.cnblogs.com/chusiyong/p/11295171.html

时间: 2024-10-07 14:59:03

C++语法小记---经典问题之一(一个空类包含什么)的相关文章

刨根问底U3D---从一个空类说起

这篇文章包含哪些内容 这篇文章从一个Empty的MonoBehaviour入手,首先讨论一下C#的修饰符internal,default,virtual,sealed 接着讨论一下MonoBehaviour,Component,Tranform,GameObject之间的关系 及脚本之间的如何互相关联 从一个空类说起 using UnityEngine; using System.Collections; public class EmptyClass : MonoBehaviour { //

一个空类被编译器编译后产生了哪些默认函数

为何空类的大小不是0呢? 为了确保两个不同对象的地址不同,必须如此. 类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址. 同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了. 所以,空类的sizeof为1,而不是0. 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function, 如果你写 class A{}; 编译器处理后,就相当于: class A { public: A()

C++ 空类及类的大小(C++面向对象模型有提及)

初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能. 首先:我们要知道什么是类的实例化,所谓类的实例化就是在内存中分配一块地址. 那我们先看看一个例子: #include<iostream.h> class a {

堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)

//stack 的基本操作 #include <iostream> using namespace std; const int maxn = 3; typedef struct Stack { //NumType num; int num; }Stack; int top = 0;//当前元素位置的上一个元素 Stack stack[maxn]; bool is_empty(); bool is_full(); int pop(); void push(const int &key)

【C++缺省函数】 空类默认产生的6个类成员函数

1.缺省构造函数. 2.缺省拷贝构造函数. 3. 缺省析构函数. 4.缺省赋值运算符. 5.缺省取址运算符. 6. 缺省取址运算符 const. <span style="font-size:18px;"> class A { public: A(){}//缺省构造函数 A(const A&){}//拷贝构造函数 ~A(){}//析构函数 A&operator=(const A&){}//赋值运算符 A*operator&(){}//取址运算

为什么C++空类的实例大小为1

[为什么C++空类的实例大小为1] 每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以大小为1. 参考:http://bbs.csdn.net/topics/370134485 为什么C++空类的实例大小为1,布布扣,bubuko.com

C++空类大小

class a {};class b{};class c:public a{ virtual void fun()=0;};class d:public b,public c{}; 类a,b明明是空类,它的大小应该为为0,为什么 编译器输出的结果为1呢?这就是我们刚才所说的实例化的原因(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以a,b的大小为1. 而类c是由类a派生而

C++空类编译器自动生成的6个成员函数

一.问题 在C++中,编译器会为空类提供哪些默认成员函数?分别有什么样的功能呢? 二.详解 1.空类,声明时编译器不会生成任何成员函数 对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符. 有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数.一个拷贝构造函数.一个析构函数.一个赋值运算符.一对取址运算符和一个this指针. 代码: [html] view plaincopy #include <iostream

C++空类以及没有成员变量的类的大小

关于C++中空类的大小为1,我们大家都有所了解,但是除了空类之外的其他一些没有成员变量的类的大小,还是有很多不明之处的. 我们来看如下一个例子: #include<iostream> using namespace std; class a {}; class b{}; class c :public a{ virtual void fun() = 0; }; class d :public b, public c{}; int main() { cout << "siz