草庐IT

private-inheritance

全部标签

c++ - 模板替换和 SFINAE 中的私有(private)成员访问

classA{inta;};templateclasstest{};templateclasstest{};intmain(){testa;}上面的代码在clangversion3.8.0-2ubuntu4(tags/RELEASE_380/final)上编译没有错误,但无法在g++-5(Ubuntu5.4.1-2ubuntu1~16.04)5.4.120160904上编译和g++-6(Ubuntu6.2.0-3ubuntu11~16.04)6.2.020160901有这样的错误:main.cpp:Infunction‘intmain()’:main.cpp:9:22:error:‘i

c++ - 模板替换和 SFINAE 中的私有(private)成员访问

classA{inta;};templateclasstest{};templateclasstest{};intmain(){testa;}上面的代码在clangversion3.8.0-2ubuntu4(tags/RELEASE_380/final)上编译没有错误,但无法在g++-5(Ubuntu5.4.1-2ubuntu1~16.04)5.4.120160904上编译和g++-6(Ubuntu6.2.0-3ubuntu11~16.04)6.2.020160901有这样的错误:main.cpp:Infunction‘intmain()’:main.cpp:9:22:error:‘i

c++ - 如何禁止公共(public)继承但允许私有(private)(和 protected )继承

C++11引入了关键字final来禁止future的覆盖或禁止继承。可以使用它的最常见示例是用于不打算用作基类的类(例如具有非虚拟析构函数)的情况。但是,有时我们可能希望在两个类之间建立is-implemented-in-terms-of关系(即private继承),而不是is-关系(public继承)。但是,final禁止这两种类型的继承。我的问题如下:有没有办法允许private继承但禁止public继承(可能不是直接的,但至少我们可以“模拟”它)?在这种情况下,即使我们使用具有非虚拟析构函数的类也不会有任何问题,因为我们不能通过指向基的指针直接使用派生类,所以我们应该没问题。我正

c++ - 如何禁止公共(public)继承但允许私有(private)(和 protected )继承

C++11引入了关键字final来禁止future的覆盖或禁止继承。可以使用它的最常见示例是用于不打算用作基类的类(例如具有非虚拟析构函数)的情况。但是,有时我们可能希望在两个类之间建立is-implemented-in-terms-of关系(即private继承),而不是is-关系(public继承)。但是,final禁止这两种类型的继承。我的问题如下:有没有办法允许private继承但禁止public继承(可能不是直接的,但至少我们可以“模拟”它)?在这种情况下,即使我们使用具有非虚拟析构函数的类也不会有任何问题,因为我们不能通过指向基的指针直接使用派生类,所以我们应该没问题。我正

C++:覆盖公共(public)\私有(private)继承

如果B使用public从A继承,可以B覆盖其中一个函数并强制它私密吗?classA{public:virtualdoublemy_func1(inti);virtualdoublemy_func2(inti);}classB:publicA//Noticethepublicinheritance{public:virtualdoublemy_func1(inti);private:virtualdoublemy_func2(inti);}反过来呢?如果继承类型是私有(private)的-B可以强制一个特定的函数是公共(public)的吗?如果A是纯抽象的怎么办?有区别吗?protect

C++:覆盖公共(public)\私有(private)继承

如果B使用public从A继承,可以B覆盖其中一个函数并强制它私密吗?classA{public:virtualdoublemy_func1(inti);virtualdoublemy_func2(inti);}classB:publicA//Noticethepublicinheritance{public:virtualdoublemy_func1(inti);private:virtualdoublemy_func2(inti);}反过来呢?如果继承类型是私有(private)的-B可以强制一个特定的函数是公共(public)的吗?如果A是纯抽象的怎么办?有区别吗?protect

c++ - 基类中的私有(private)静态成员

#include#includeclassBase{staticstd::strings;};templateclassDerived:Base{public:Derived(){std::coutobj;}本程序编译运行正常。静态变量s在私有(private)继承的基类中是私有(private)的。派生类如何访问它?如果派生类不是模板,编译器会提示访问私有(private)变量。[aminasya@amy-aminasya-lnxc++]$g++--versiong++(GCC)4.4.720120313(RedHat4.4.7-3)Copyright(C)2010FreeSoftw

c++ - 基类中的私有(private)静态成员

#include#includeclassBase{staticstd::strings;};templateclassDerived:Base{public:Derived(){std::coutobj;}本程序编译运行正常。静态变量s在私有(private)继承的基类中是私有(private)的。派生类如何访问它?如果派生类不是模板,编译器会提示访问私有(private)变量。[aminasya@amy-aminasya-lnxc++]$g++--versiong++(GCC)4.4.720120313(RedHat4.4.7-3)Copyright(C)2010FreeSoftw

C++ - 将静态映射初始化为私有(private)类成员

假设我在一个深夜很无聊,在紧张地盯着电脑显示器几个小时之后,我决定实现一个聚合C++类来管理绘制像素的颜色,因为我显然已经疯了。对于初学者,我们只需告诉(可能是单例的)ColorManager对象我们想要使用什么颜色,然后它会返回一个Color对象,无论它是什么。一个简单的实现:#include"Color.h"#includeenumCOLOR{RED=0,BLUE,GREEN,YELLOW,ORANGE,WHITE,BLACK,BRICKS_FROM_A_DISTANCE_ON_AN_UNUSUALLY_SUNNY_AFTERNOON,//etcCOLOR_COUNT};class

C++ - 将静态映射初始化为私有(private)类成员

假设我在一个深夜很无聊,在紧张地盯着电脑显示器几个小时之后,我决定实现一个聚合C++类来管理绘制像素的颜色,因为我显然已经疯了。对于初学者,我们只需告诉(可能是单例的)ColorManager对象我们想要使用什么颜色,然后它会返回一个Color对象,无论它是什么。一个简单的实现:#include"Color.h"#includeenumCOLOR{RED=0,BLUE,GREEN,YELLOW,ORANGE,WHITE,BLACK,BRICKS_FROM_A_DISTANCE_ON_AN_UNUSUALLY_SUNNY_AFTERNOON,//etcCOLOR_COUNT};class