草庐IT

Inheritance

全部标签

c++ - 继承自ifstream

我可以像这样从ifstream继承并从我的派生类读取文件吗:#includeusingnamespacestd;conststringusage_str="Usage:extract";classFile:publicifstream{public:explicitFile(constchar*fname,openmodemode=in);voidextract(ostream&o);};File::File(constchar*fname,openmodemode){ifstream(fname,mode);}voidFile::extract(ostream&o){charch;c

c++ - 如何在编译时验证模板类是从给定类派生的?

我想知道,是否有任何优雅的方法(如this)来检查模板参数是否派生自给定的类?一般而言:templateclassMyClass{//sholdgivethecompilationerrorifBisnotderivedfromA//butshouldworkifBinheritsfromAasprivate}另一个question中提供的解决方案仅当B作为公共(public)继承自A时才有效:classB:publicA然而,我宁愿没有这样的约束:classA{};classB:publicA{};classC:privateA{};classD;MyClass//worksnowM

c++ - "Inheriting"具有可变模板函数的类

我想编写一个可以操作不同类型数据库(例如sqlite、postgres等)的数据库包装器,因此无论用户实际使用什么数据库,他们编写的代码都不会改变。在我看来,这需要一个抽象基类,例如:classdatabase{public:virtualboolquery(conststd::string&q)=0;//Otherstuff};classsqlite:publicdatabase{public:boolquery(conststd::string&q){//Implementation}};这看起来不错,但我正在使用可变参数模板来转义查询中的参数(我真的很喜欢这个想法,所以我想坚持下

C++单例模板类继承

我有一个抽象的单例类。我的目标是任何子类只需要实现init()函数而不是其他任何东西。这是我所做的:templateclassSingleton{public:Singleton(){init();}staticT&instance(){staticTinstance;returninstance;}protected:virtualvoidinit()=0;};classSubSingleton:publicSingleton{protected:voidinit(){cout这不会编译,因为init()是protected,不能从公共(public)静态函数调用。这个问题有2个解决

c++ - 接口(interface),绝对就是纯虚函数,或者...?

每次我读到接口(interface)时,都会提到它从来没有任何数据成员或实现。但是当我看到带有接口(interface)的代码时,它们两者都有。classIInterface{public:IInterface(){}virtual~IInterface(){}intgetInt(){returnm_int;}virtualvoidBoo()=0;intm_int;};classcInterface:publicIInterface{public:virtualvoidBoo(){printf("definedin.cppforreadability\n");};};classcFoo

c++ - 在 C++ 中使用继承时避免不必要的函数声明/定义

经过长时间的C风格过程编码,我才刚刚开始“掌握”OOP。所以我怀疑可能有标准的方法来处理我所面临的情况。我有一个类层次结构如下所示的应用程序:#includeusingnamespacestd;classA{public:virtualintintf(){return0;}//OnlyneededbyBvirtualdoubledf(){return0.0;}//OnlyneededbyC};classB:publicA{intintf(){return2;}//Bobjectshavenousefordf()};classC:publicB{doubledf(){return3.14

c++ - 在C++中,接受基类的构造函数算作复制构造函数吗?

例如:classDerived:publicBase{Derived(constBase&rhs){//Isthisacopyconstructor?}constDerived&operator=(constBase&rhs){//Isthisacopyassignmentoperator?}};显示的构造函数算作复制构造函数吗?显示的赋值运算符算作复制赋值运算符吗? 最佳答案 Doestheconstructorshowncountasacopyconstructor?没有。它不算作复制构造函数。它只是一个转换构造函数,而不是复制

c++ - 在复制赋值运算符中分配基类成员

我有一个继承自MSFT类的类,因此无法更改,我希望派生类的复制构造函数和复制赋值运算符具有相同的行为。我遇到的问题是,在复制构造函数中,您可以自由地为初始化列表中的基类调用构造函数,但在运算符中,这不是一个选项。如何在赋值运算符中正确地重新创建此行为?仅在运算符重载的主体中调用基类的构造函数就足够了吗?附加说明:基类继承自CObject,它具有operator=()和复制构造函数作为私有(private)和未实现的方法,因此不幸的是,对这些方法的任何调用都会导致编译错误。我在下面提供了一个简化的代码场景:类声明:classBase{protected:intbaseInt;public

c++ - 成员访问和模板特化

我有这个类模板templateclassWrapper{public:virtualvoidparse(std::strings)=0;protected:Tvalue;};理想情况下,每种类型都应该知道如何从字符串中解析自身,所以我想有,例如,专门化templateclassWrapper{public:virtualvoidparse(std::strings){value=atoi(s.c_str());}};但是,显然,我无法从主模板访问“值”成员。我得到的是这样的:Inmemberfunction'virtualvoidWrapper::parse(std::string)'

c++继承私有(private)复制构造函数: how doesn't this yield a compile time error?

在C++中,如果我们有这个类classUncopyable{public:Uncopyable(){}~Uncopyable(){}private:Uncopyable(constUncopyable&);Uncopyable&operator=(constUncopyable&);};然后我们有一个派生类classDervied:privateUncopyable{};我的问题是:当编译器在派生类中生成默认的复制构造函数和赋值运算符时,为什么这不会生成编译时错误?生成的代码不会尝试访问基类私有(private)成员吗? 最佳答案