64,648
社区成员
发帖
与我相关
我的任务
分享
void log(std::string message);
class A {
public:
A(int id);
virtual ~A();
virtual std::string get_name()=0;
int get_id();
};
A::~A() {
log("Destroying: " + get_name());
}
a)不可能有子类因为A没有构造函数//pass
b)get_name()不能再析构函数里调用//不是不能,是不应该,见effictive c++有表述
c) A里有一个纯虚函数,所以他的构造函数也必须是virtual//pass
d) 析构函数里的+ operator不合法,因为左右操作数不同//pass隐式转换,但是b已经说了不应该在构造或者析构中调用虚函数
e)析构函数只能销毁内存,不能调用函数//您是什么意思?析构函数自己销毁还是我手动销毁?但不管怎样后半句决定它PASS了
之后你反问:综上所述考官大人您认为我应该选哪个,这题是您出的吗?
#include<iostream>
using namespace std;
class test
{
public:
virtual ~test(){func();}
virtual void func()=0
{
cout<<"test func"<<endl;
}
};
class test1:public test
{
public:
~test1(){func();}
void func()
{
cout<<"test1 func"<<endl;
}
};
void main()
{
test1 tes;
}
#include <iostream>
using namespace std;
class A
{
public:
void interFace()
{
func();
}
protected:
virtual void func()=0;
};
class B:public A
{
public:
virtual void func()
{
cout<<"A"<<endl;
}
};
int main()
{
A *p=new B();
p->interFace(); //这样完全可以,因为调用的是B的func
//effective C++里有提到这种情况,也是很常见的设计
return 0;
}
virtual std::string get_name()=0;
纯虚方法,没法调用.
选择:B