2016-09-17 130 views
-2

我想将一个类对象分配给C++中的另一个类对象。将一个类对象分配给C++中的另一个类对象

例: 有一个Dog类和其他类猫。创建每个实例(d1 & c1)。不想使用任何STL。我想在我的代码中使用此声明

d1 = c1;

计划

class dog 
{ 
    char dc; 
    float df; 
    int di; 
public: 
    void setdata2(char c, float f, int i) 
    { dc = c; df = f; di = i; } 
    void showdata2() 
    { cout <<"char =" << dc <<", float =" << df <<", int =" << di <<endl; } 
}; 


class cat 
{ 
    float cf; 
    int ci; 
    char cc;  
public: 
    void setdata(float f, int i, char c) 
    { cf = f; ci = i; cc = c; } 
    void showdata() 
    { cout <<"float =" << cf <<", int =" << ci <<", char =" << cc <<endl; } 
}; 


int main() 
{ 
    dog d1, d2; 
    cat c1, c2; 

    d1.setdata2('A', 56.78, 30); 
    c1.setdata(12.34, 2, 3); 
    d1.showdata2(); 
    c1.showdata(); 

    d2 = c1;  // Question 1 

    dog d3(c1);  // Question 2 

    dog d4 = c1; // Question 3 

    return 0; 
} 

请回答问题1/2/3每个分别

回答

1

我想用C一类对象分配给另一个类对象++。

是可能的A类型的对象分配给B类型的对象如果Aimplicitly convertibleB,和Bassignable - 或者,如果B具有接受A类型的对象的overloaded赋值运算符。

有两种方法可以定义从自定义类型A到无关类型B的转换。您可以为A定义conversion function,或者可以为B定义converting constructor

1)这是复印任务。以上说明适用。定义为cat::operator dog()dog::dog(cat)dog::operator=(cat)

2)这是direct initialization。这不是你问到的任务。定义隐式转换也适用于此,但重载的赋值运算符不会。但是,重载的构造函数将是替代的第三种选择。

3)尽管这看起来有点像语法上的赋值,但实际上这是copy initialization。与2)相同的规则适用。


PS。请注意,您正在通过名称d3定义两个变量。这是一个错误。

+0

你能告诉我在第一个答案中编译器在哪个顺序中搜索定义。 – Lavnesh

+0

它不工作。@ user2079303 [Code Link](https://gist.github.com/anonymous/90d6928fdfdbc6287ee0e91b85dc94f2) – Lavnesh

2

除非您为它们重载"="运算符,否则不能将彼此不相关的不同类的两个对象分配给彼此。

你可以阅读有关运算符重载here

相关问题