C++中的空类,默认产生哪些类成员函数。

1. 默认成员函数

Class Empty

{

public:

Empty(); // 缺省构造函数

Empty( const Empty& ); // 拷贝构造函数

~Empty(); // 析构函数

Empty& operator=( const Empty& ); // 赋值运算符

Empty* operator&(); // 取址运算符

const Empty* operator&() const; // 取址运算符 const

};

2. 类可以有多个拷贝构造函数,形式如下:

a). 对于一个类X,如果一个构造函数的第一个参数是下列之一:

a) X&

b) const X&

c) volatile X&

d) const volatile X&

且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数。

X::X( const X& );     //是拷贝构造函数

X::X( X&, int = 1 );  //是拷贝构造函数

X::X( X&, int = 1, float =2.f); //是拷贝构造函数

时间: 2024-11-05 19:42:20

C++中的空类,默认产生哪些类成员函数。的相关文章

C++ 空类默认产生的类成员函数

C++的空类有哪些成员函数:. 缺省构造函数.. 缺省拷贝构造函数.. 缺省析构函数.. 缺省赋值运算符.. 缺省取址运算符.. 缺省取址运算符 const.     注意:有些书上只是简单的介绍了前四个函数(宝典4th p112).没有提及后面这两个函数.但后面这两个函数也是空类的默认函数(Ref:<effective c++>).另外需要注意的是,只有当实际使用这些函数的时候,编译器才会去定义它们. //C++ 空类默认产生的类成员函数: //缺省构造函数,拷贝构造函数,析构函数,赋值运算

【C++】编写一个简单的类。包含构造函数,成员函数等。

<pre name="code" class="cpp">//编写一个简单的类.包含构造函数,成员函数等. #include <iostream> using namespace std; class Rec { public: Rec(int l,int w); int Area(); void Print(); private: int length,wide; }; Rec::Rec(int l,int w) { length=l; w

C#中Stack&amp;lt;T&amp;gt;类的使用及部分成员函数的源代码分析

Stack<T>类 Stack<T> 作为数组来实现. Stack<T> 的容量是 Stack<T> 能够包括的元素数. 当向 Stack<T> 中加入元素时,将通过又一次分配内部数组来依据须要自己主动增大容量. 可通过调用 TrimExcess 来降低容量. 假设 Count 小于堆栈的容量,则 Push 的运算复杂度是 O(1). 假设须要添加容量以容纳新元素,则 Push 的运算复杂度成为 O(n).当中 n 为 Count. Pop 的运

C#中Stack&lt;T&gt;类的使用及部分成员函数的源码分析

Stack<T>类 Stack<T> 作为数组来实现. Stack<T> 的容量是 Stack<T> 可以包含的元素数. 当向 Stack<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量. 可通过调用 TrimExcess 来减少容量. 如果 Count 小于堆栈的容量,则 Push 的运算复杂度是 O(1). 如果需要增加容量以容纳新元素,则 Push 的运算复杂度成为 O(n),其中 n 为 Count. Pop 的运算复杂

【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态

实现基类(父类)以及派生类(子类),验证继承与转换--赋值兼容规则: 子类对象可以赋值给父类对象(切割/切片) 父类对象不能赋值给子类对象 父类的指针/引用可以指向子类对象 子类的指针/引用不能指向父类对象(可以通过强制类型转换完成) #include<iostream> using namespace std; class People    //父类或者基类 { public:     void Display()     {         cout << "_na

C++类内存布局图(成员函数和成员变量分开讨论)

一.成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息. 成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对应的对象上.对象调用成员函数时,早在编译期间,编译器就可以确定这些函数的地址,并通过传入this指针和其他参数,完成函数的调用,所以类中就没有必要存储成员函数的信息. 二.成员变量 转自:http://www.cnblogs.com/jerry19880126/p/3616999.html 书上类继

《C++程序设计POJ》《WEEK3 类和对象进阶》成员对象和封闭类/友元/this指针/常量成员函数

// 构造函数赋值 CTyre(int r, int w):radius(r), width(w) { } 初始化列表 #include<iostream> using namespace std; /*成员对象和封闭类 成员对象: 一个类的成员变量是另一个类的对象 包含 成员对象 的类叫 封闭类 (Enclosing) */ class CTyre { private: int radius; int width; public: CTyre(int r, int w) :radius(r)

string类以及其常用的成员函数

标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用.现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧!要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件using  std::string;using  std::wstring;或using namespace std; string类的

实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

前面提到的emplace_back就是C++11所增加的内容. 所以这篇博客就是想罗列一下C++11对vector容器的扩充. std::vector::cbegin和std::vector::cend 这两个方法是与std::vector::begin和std::vector::end相对应的,从字面就能看出来,多了一个'c',顾名思义就是const的意思. 所以: std::vector::cbegin: Returns a const_iterator pointing to the fi

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~