Путаница в конструкторе вызова через временный объект в качестве аргумента в функциипутаница в конструкторе вызова в виртуальной функции
#include <iostream>
using namespace std;
class Base
{
protected:
int i;
public:
Base() {
cout<<"\n Default constructor of Base \n";
}
Base(int a)
{
i = a;
cout<<"Base constructor \n";
}
void display(){
cout << "\nI am Base class object, i = " << i ;
}
~Base(){
cout<<"\nDestructor of Base\n";
}
};
class Derived : public Base
{
int j;
public:
Derived(int a, int b) : Base(a) {
j = b;
cout<<"Derived constructor\n";
}
void display() {
cout << "\nI am Derived class object, i = "<< i << ", j = " << j;
}
~Derived(){
cout<<"\nDestructor Of Derived \n";
}
};
void somefunc (Base obj) //Why there is no call to default constructor of Base class
{
obj.display();
}
int main()
{
Base b(33);
Derived d(45, 54);
somefunc(b) ;
somefunc(d); // Object Slicing, the member j of d is sliced off
return 0;
}
Мой вопрос состоит в том, что, почему нет вызова по умолчанию конструктору базового класса, когда мы создание временного объекта базового класса в функции (void somefunc (Base obj))
Компилятор предоставит конструктор по умолчанию, если пользователь не определен. – Subhajit
Да, копия по умолчанию ctor i означает – Subhajit
@Subhajit Да, я добавил ее, чтобы ответить. – songyuanyao