C++的类默认有哪些成员?
来源:互联网 发布:12309网络举报平台 编辑:程序博客网 时间:2024/05/01 05:50
我们可以思考一下,当我们定义一个形式上空的类,C++为这个类提供了哪些默认功能?是否可以说齐全呢?
有些看起来理所当然的东西,也是需要默认实现的。
看简单代码
01
#include <iostream>
02
03
class
TTestClass{};
04
05
int
main(
int
argc,
char
**argv)
06
{
07
TTestClass tc;
08
TTestClass *p = &tc;
09
tc = *p;
10
delete
p;
11
}
1
TTestClass tc; 说明C++提供了默认的拷贝构造函数。
1
TTestClass *p = &tc; 表明C++为类实现了取得地址运算符。
1
tc = *p; 代表C++ 实现了赋值操作符号
1
delete
p; 代表实现了析构函数。
1
因此可以总结一下,C++
class
的默认接口大致为
01
<DIV
class
=cnblogs_Highlighter><PRE
class
=brush:cpp>
class
TObject{
02
public
:
03
TObject();
04
~TObject();
05
TObject(
const
TObject &src);
06
TObject &operator=(
const
TObject &src);
07
TObject *operator&(
const
TObject &src);
08
};
09
</PRE>
10
</DIV>
另外注意语句
1
TTestClass tc = xxx;
仅仅调用了拷贝构造函数。区分"="是赋值还是copy constructor的关键就是要看"="左边的对象已经构造了没有
- 如果已经构造了,就是进行赋值操作
- 如果还没有构造,就是进行copy构造函数
下面的代码证明了上述观点
代码
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#include <iostream>class TestClass{private: int data;public: TestClass(): data(-1){ std::cout<<"Default Constructor"<<std::endl; } TestClass(const TestClass &src){ std::cout<<"Copy Constructor"<<std::endl; } ~TestClass(){ std::cout<<"Default Destructor"<<std::endl; } TestClass& operator=(const TestClass &src){ std::cout<<"Asign Value Operator"<<std::endl; memcpy(this, &src, sizeof(src)); return *this; } void setData(int data){ this->data = data; } int getData(){ return data; }}; int main(){ TestClass tc; //默认构造 tc.setData(0); TestClass tc1 = tc; //拷贝构造 TestClass tc2(tc); //拷贝构造 TestClass tc3;// 默认构造 tc3 = tc; // 赋值操作 std::cout<<tc.getData()<<" "<<tc1.getData()<<" "<<tc2.getData()<<" "<<tc3.getData()<<std::endl; return 0;} 运行结果为Default ConstructorCopy ConstructorCopy ConstructorDefault ConstructorAsign Value Operator0 4247360 -1859193535 0Default DestructorDefault DestructorDefault DestructorDefault Destructor
请按任意键继续. . .
注意 中间两个的结果数值诡异的原因是我们写的拷贝构造函数没有真的copy,应该向赋值操作那样memcpy一下
最后对象销毁,执行了三次析构函数
- C++的类默认有哪些成员?
- C++空类默认有哪些成员函数?
- c++-空类默认产生的成员
- C++编译器会为类产生哪些默认的成员方法?---聊聊C++的Big Three
- C++中一个空类含有哪些默认的成员函数
- C++中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数?
- C++ 中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数?
- C++中的空类,默认产生哪些类成员函数
- C++中的空类,默认产生哪些类成员函数
- C++中的空类,默认产生哪些类成员函数
- C++中的空类默认产生哪些类成员函数
- C++中的空类,默认产生哪些类成员函数
- C++中的空类,默认产生哪些类成员函数?
- prototype of signal
- TAO naming service
- 路由动态选路协议
- 数组指针
- Word,PDF,PPT,TXT之间的转换方法
- C++的类默认有哪些成员?
- 第一章 设备驱动程序简介
- 我来形容一下如果否则
- 资治通鉴,卷六十一,荀彧的大略
- C文件操作
- Linux与Windows文本格式之间的转化
- java web开发中需要弄清楚的一些概念
- PHP:特殊语法记录
- java swing中对于JList的使用(三)