c++中一个空类会有哪些默认的成员函数

作者&投稿:后习 (若有异议请与网页底部的电邮联系)
C++中的空类有默认产生哪些成员函数函数~

class A{};class A{ A();//无参构造函数 ~A();//析构函数 A(const A& a);//复制构造函数 A& operator =(const A& a);//赋值运算符};

默认构造函数(无参构造函数),复制构造函数。

  1. 默认构造函数 Class()

  2. 复制构造函数 Class(const Class& other)

  3. 析构函数 ~Class()

  4. 赋值函数 Class & operator=(const Class & other)

百度一下你就知道:网页链接

这种比较基础的问题还是建议先搜搜的好。。。

回楼上,了解这些对有些情况还是有意义的。

比如定义一个单例,希望全局只有一个实例。。。如果不做特殊处理:

class Singleton {
public:
    Singleton& getInstance() {
        Singleton & instance;
        return instance;
    }
};

那在使用的时候,如果不小心写了

Singleton &s = Singleton::getInstance();
Singleton copyS(s); //这是会复制一份的,调用了自动生成的复制构造函数
Singleton otherS; //这是另一个实例了,调用了自动生成的默认构造函数
otherS = s;//这也是会复制一份的,调用了自动生成的赋值函数

存在被复制的可能性,并且可以定义很多个变量,那就达不到“单例”的效果了。最好的方式是亲自把这些定义变成private的:

class Singleton {
public:
    Singleton& getInstance() {
        Singleton & instance;
        return instance;
    }
private:
    Singleton(); //拒绝别人用Singleton a;定义变量
    Singleton(Singleton&); //拒绝别人用Singleton a(b);复制变量
    Singleton& operator=(Singleton&); //拒绝别人用a=b;复制变量
};

像上面这样写了之后,上面的几种复制就会在编译时期报错:

Singleton &s = Singleton::getInstance();
Singleton copyS(s); //复制构造函数是私有的,不能访问
Singleton otherS; //默认构造函数是私有的,不能访问
otherS = s;//operator=也是私有的,不能访问

//这样,还可以保证子类也不能复制Singleton
class Test: public Singleton {
public:
    void testCopySingleton(const Singleton & other) {
        Singleton a = other; //一样,父类的构造函数和operator=都是私有的,子类不能访问
    }
};

虽然不想承认,不过c++这些细节和坑还是让人恨死。。。



这样的答案有什么意义呢?理论上对你编程毫无意义


c++中一个空类会有哪些默认的成员函数
Singleton &s = Singleton::getInstance();Singleton copyS(s); \/\/这是会复制一份的,调用了自动生成的复制构造函数Singleton otherS; \/\/这是另一个实例了,调用了自动生成的默认构造函数otherS = s;\/\/这也是会复制一份的,调用了自动生成的赋值函数存在被复制的可能性,并且可以定义很多个变量,那...

一个空类有几个this指针?
类的任何函数都有this指针,包括各种操作符重载(其本质也是函数调用),需要明确的是,this指针不是你源代码中定义的,而是编译器生成最终的机器码时,按调用约定自动加的一个常量(因为编译器知道当前对象地址),即this指针。对于函数调用的理解最好学习点汇编的常规指令,在编译器中用反汇编命令查看汇编...

一个空类的实例占用多少字节
一个空类的实例占用0个字节。在内存中,类的实例是使用引用计数来管理的,这意味着一个空类的实例没有任何数据,因此它不会占用任何内存空间。相反,一个非空类的实例会占用一定的内存空间,因为它们包含了一些数据成员和成员函数。这些数据成员和成员函数的大小取决于它们的类型和数量,因此非空类的实例...

C++中一个空类的大小为什么是1?
这就是实例化的原因(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以空类所占的内存大小是1个字节。include<iostream>using namespace stdclass a{};int main(...

编译一个空类,默认会生成哪些函数?急!
构造函数、析构函数、拷贝构造函数

c++定义一个空类,大小是多少?加一个虚函数呢?加两个虚函数
这个情况情况比较复杂,举一个missgya的例子,在电脑上是C是8字节,也就是一个指向虚表的指针的大小,关于这个,再补充一点知识:空类最常用于作为基类,那时候为了对齐实际可能占4个字节或以上。但这样会浪费空间,尤其是多重继承多个空基类的时候。所以编译器有空基类优化(empty base class optimization...

为什么空类占一个字节?
(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.因为如果空类不隐含加一个字节的话,则空类无所谓实例化了(因为类的实例化就是在内存中分配一块地址。

java初始化了一个空类.可以为类属性赋值吗?
因为student[i]是空的,里面没有元素。

JAVA中一个空类占多大内存
是指一个空对象吗?只是new出来了,没有初始化属性那种?可以通过ObjectOutputStream把该对象写入一个文件或者写入一个ByteArrayOutputStream,然后看对应文件或ByteArray的大小。

同一个类的两个对象能用“=”赋值吗
空类有6个默认函数,如下:Empty(); \/\/ 缺省构造函数 Empty( const Empty& ); \/\/ 拷贝构造函数 ~Empty(); \/\/ 析构函数 Empty& operator=( const Empty& ); \/\/ 赋值运算符 Empty* operator&(); \/\/ 取址运算符 const Empty* operator&() const; \/\/ 取址运算符 const operator=是其中...

唐县13529127606: C++中的空类,默认产生哪些类成员函数?分别有什么作用 -
殷勤嘉固元: 1:默认构造函数 2:默认拷贝构造函数 3:默认赋值操作符 4:默认虚构函数 5:取值操作符. 如 class A {A();A(const A &lhs);A& operator=(const A &lhs);~A();A* opeator&(); } sizeof(A) = 1;

唐县13529127606: c++中一个空类会有哪些默认的成员函数 -
殷勤嘉固元: 1. 默认构造函数 Class() 2. 复制构造函数 Class(const Class& other) 3. 析构函数 ~Class() 4. 赋值函数 Class & operator=(const Class & other) 百度一下你就知道:网页链接 这种比较基础的问题还是建议先搜搜的好... 回楼上,了解这些对有些...

唐县13529127606: C++ 空类,默认产生哪些成员函数 -
殷勤嘉固元: . 020202 默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符 这四个是我们通常大都知道的.但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const即总共有六个函数.020202 一个示例如下: 1:class Empty 2:02...

唐县13529127606: C++中的空类有默认产生哪些成员函数函数 -
殷勤嘉固元: 无参构造函数,析构函数,复制构造函数

唐县13529127606: C++中的空类默认产生哪些类成员函数 -
殷勤嘉固元: 默认构造函数(无参构造函数),复制构造函数.

唐县13529127606: C++ 空类,默认产生哪些成员函数 -
殷勤嘉固元: 生成对象时,会包括构造函数,析构函数,拷贝构造函数, 赋值函数(也还有取址运算符和 取址运算符(const));也就是一个类默认声明了这些函数. 默认是public的,你也可以按需要修改默认为private

唐县13529127606: C++中的空类,编译器默认可以产生哪些成员函数 -
殷勤嘉固元: 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class Empty{}; 就相当于: class Empty { public: Empty(); Empty(const Empty&); ~Empty(); Empty& operator=(const Empty& rhs); Empty* operator&(); const Empty* operator&() const; }; 需要注意的是只有当你需要用到这些函数的时候,编译器才会去定义它们.

唐县13529127606: C++中的空类编译器默认隐式声明哪些成员函数 -
殷勤嘉固元: 如果你只是声明一个空类,不做任何事情的话,编译器会自动为你生成四个函数:一个默认构造函数、 一个拷贝默认构造函数、 一个默认拷贝赋值操作符 一个默认析构函数

唐县13529127606: c++ 一个类中有哪些程序默认的成员函数 -
殷勤嘉固元: 构造函数和析构函数是每个类都有的成员函数.构造在类实例化时调用,即第一个被调用的类成员函数.析构在类被释放时调用,即最后一个被调用的类成员函数.

唐县13529127606: C++编译器会为类产生哪些默认的成员方法 -
殷勤嘉固元: 类默认成员方法:默认构造函数、析构函数、复制构造函数和复制赋值操作符.C++11新增了两个,转移构造函数和转移赋值操作符.前提是你没有自定义.例如:你定义了构造函数,系统就不会为你生成默认构造函数,你要用默认构造函数就要自己在定义一个默认构造函数.应该没问题吧.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网