#include<iostream>
#include<string>
using namespace std;
/*
声明已个空类时,编译器会为它声明一些东西
*/
class Empty{
public:
Empty(){} //默认构造函数是午餐的构造函数
Empty(const Empty& rhs){} //赋值构造函数
~Empty(){} //析构函数
Empty& operator=(const Empty& rhs){} //重载等号运算符
};
/*
当自己手动创建了一个构造函数,编译器就不会再为该类创建一个无参的构造函数
*/
template<class T>
class NamedObject{
public:
NamedObject(std::string& namem, const T& value);
//类中没有自行定义=重载
private:
std::string& nameValue; //字符串的引用
const T objectValue; //const的私有成员变量
};
void test01()
{
std::string newDog("Persephone");
std::string oldDog("Satch");
NamedObject<int > p(newDog, 2);
NamedObject<int> s(oldDog, 3);
//p = s;//这里会报错,显示operator=在这个类中不可用
}
/*
在一般情况下,会默认生成重载等号函数,但是在上面的这两种情况,引用和const
是C++不允许的等号赋值操作,这种情况编译器也不知道怎么去处理,所以遇到这种情况
编译器就不会生成等号重载函数,只能手动写。
*/
int main()
{
}
effective C++学习---条款5:了解C++默默编写并调用哪些函数
最新推荐文章于 2022-11-19 15:15:33 发布