标签:style class blog c code ext
和默认构造函数一样,当用户未显式定义复制构造函数时,编译器只有在某些条件下才会合成一个nontrivial的复制构造函数。所以,如果一个类未定义复制构造函数,编译器就自动为它产生出一个,这句话是错误的。下面主要讨论在哪些情况下,编译器才会自动合成一个复制构造函数。class Foo {
public:
int x, y;
};class Foo {
public:
int x, y;
string str;
};#include <iostream>
using namespace std;
class Foo {
public:
Foo() {} // 此构造函数必须定义
Foo(const Foo &f) { cout << "Foo‘s copy construct!" << endl; }
};
class Bar: public Foo {
public:
// 未定义复制构造函数
int x, y;
Foo foo;
};
int main()
{
Bar ba;
Bar bb = ba;
return 0;
}#include <iostream>
using namespace std;
class Foo {
public:
virtual void func()
{ cout << "virtual function in Foo!" << endl; }
};
class Bar: public Foo {
public:
void func()
{ cout << "virtual function in Bar!" << endl; }
};
int main()
{
Bar b1;
Bar b2 = b1; // vptr直接复制,指向相同的virtual function table
b2.func();
Foo foo = b1; // 发生切割,vptr不直接复制,指向不同的virtual function table
foo.func();
return 0;
}
模式识别 - 处理特征数据 及 代码,布布扣,bubuko.com
标签:style class blog c code ext
原文地址:http://blog.csdn.net/caroline_wendy/article/details/26240241