因为C++不允许"让referenc改指向不同对象"。
如果你打算在一个"内含reference成员"的class内支持赋值操作,你必须自己定义copy
assignment操作符。(情况如例1)
面对"内含const成员"的classes,编译器的反应也一样。
最后还有一种情况:如果某个base
classes将copy
assignment操作符声明为privates,编译器将拒绝为其derived
classes生成一个
copy assignment操作符。毕竟编译器为derived
classes所生的copy
assignment操作符想象中可以处理base
class成分,但它们
当然无法调用derived
class无权调用的成员函数。
例一:
#include
#include <stdio.h>
#include
using namespace std;
/类定义****/
template
class NameObject{
private:
std::string&
nameValue;
const T
objectValue;
public:
NameObject(std::string&
name, const T value):
nameValue(name),
objectValue(value)
{};
void
get(){
cout<<nameValue<<
(int)objectValue <<endl;
};
void
set(std::string name){
nameValue = name;
};
};
int main()
{
std::string newDog(“Persephone”);
std::string oldDog(“Satch”);
NameObject p(newDog,2);
NameObject s(oldDog, 36);
NameObject q=s;
p.get();
s.get();
q.get();
s.set(“AAA”);
s.get();
q.get();
}
输出:
Persephone2
Satch36
Satch36
AAA36
AAA36
例二:
#include
#include <stdio.h>
#include
using namespace std;
/类定义****/
template
class NameObject{
private:
std::string
nameValue;
T objectValue;
public:
NameObject(const
char* name, const T value):
objectValue(value)
{
nameValue= name;};
void
get(){
cout<<nameValue<<
(int)objectValue <<endl;
};
void
set(std::string name){
nameValue = name;
};
};
int main()
{
std::string newDog(“Persephone”);
std::string oldDog(“Satch”);
NameObject p(“Persephone”,2);
NameObject s(“Satch”, 36);
p=s;
//p(s); //error: no
match for call to ‘(NameObject) (NameObject&)’
s.get();
p.get();
s.set(“AAA”);
s.get();
//q.get();
}
输出:
Satch36
Satch36
AAA36