C++ abstract classes
C++ abstract classes
我是c++新手,我用Java写了一年代码。在c++中,接口和抽象类的等价只是抽象类。在做工厂设计时,这应该是一个障碍吗?有很多时候,我想省去定义继承类的方法,我想强制执行。
如果你这样定义,你可以有你想要的:
class A {
public:
virtual void pure_virtual(int param1) = 0;
virtual ~A() { };
};
EDIT:谢谢Nikolai和Mike!
Java接口最好翻译为c++抽象类。在Java中(据我所知)接口只是抽象类的一个子集,除非它允许"多重继承",而c++在所有情况下都有。
class thing_interface {
public:
virtual ~thing_interface() {}
virtual void foo() =0; //pure virtual function
};
class other_interface {
public:
virtual ~other_interface () {}
virtual void bar() =0; //pure virtual function
};
class thing_impl : public thing_interface, public other_interface {
protected:
int member;
public:
thing_impl() : member(0) {}
virtual ~thing_impl() {};
virtual void foo() { std::cout << "FOO!n";}
virtual void bar() { std::cout << "BAR!n";}
};
=0
语法意味着它不在接口中定义,但是必须在实现接口的类中定义。还要注意,如果你有任何虚函数,你几乎总是需要一个虚析构函数。如果你试图自己创建一个thing_interface
, c++会告诉你一个错误,因为没有实现函数。
这并不是一个真正的障碍,因为我想不出Java能做的任何事情都是c++不能做的。
在接口/抽象类方面,您不会感到障碍。你应该读一读c++的纯虚函数和抽象类。
要在c++中拥有接口,下面是sudo代码:class MyInterface {
virtual void func1() = 0;
virtual int func2(int x, int y) = 0;
}
class MyAnotherInterface {
virtual void func3() = 0;
virtual int func4(int x, int y) = 0;
}
要在c++中拥有抽象类,下面是sudo代码。您可以看到它只实现了上面接口中的一个函数。所以你不能创建它的实例。
class MyAbstract : public MyIterface {
void func1() {
printf("in func1");
}
}
现在实际的具体类:
class MyConcreteClass : public MyAbstract, public MyAnotherIterface {
int func2(int x, int y) {
printf("func2 x=%x,y=%y",x,y);
}
void func3() {
printf("in func3");
}
int func4(int x, int y) {
printf("func4 x=%x,y=%y",x,y);
}
}
有一些问题,当你使用多重继承,因为我使用MyConcreteClass。但是如果你只有一个带有成员变量的基类,而其他基类只包含纯虚函数,那么这种模式就像Java一样,其中包含一些方法和成员变量的类映射到extends
,而其他只包含纯虚函数的类映射到' implements'。
在我们的示例中,Java等效代码是
class MyConcreteClass extends MyAbstract implements MyAnotherInterface {
public int func2(int x, int y) {
System.out.print(String.format("func2 x=%x,y=%y",x,y));
}
public void func3() {
System.out.print("in func3");
}
public int func4(int x, int y) {
System.out.print(String.format("func4 x=%x,y=%y",x,y));
}
}
当我来自Java时,我感到障碍的唯一其他地方是泛型。c++有这样的模板,但是它们有一些严重的限制。
相关文章:
- Threads with Classes and std::packaged_task
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- C++ "'Shape': cannot instantiate abstract class"找不到问题的根源
- C++ Classes/Confusion
- 在使用Qt Designer Form Classes扩展我自己的自定义小部件时防止重复的自动连接
- 让编译器告诉哪些方法不具体,而不是错误'invalid new-expression of abstract class type'
- Classes composition
- C++ - 创建游戏实体时,我应该使用"sub classes"还是结构?
- CRTP - 静态接口中的"abstract"方法
- C++中"classes"(非对象)的哈希表
- inheritance Classes
- "Allocating an object of abstract class type"错误,尽管所有函数都有实现
- C++11 empty flag classes
- Derived Classes C++
- C++ "Virtual functions handling on multiple base classes"
- Singleton Service classes in c++
- Static classes C ++
- Splitting up classes c++
- IDL 接口,C++,CORBA,我正在处理"conflicting return type specified for"和"invalid abstract return type for memb
- C++ abstract classes