草庐IT

private-inheritance

全部标签

c++ - 在继承中访问私有(private)成员

我有一个A类,它有一个字段val声明为私有(private)。我想声明一个类B,它继承自A并可以访问val。有没有办法在C++上做到这一点?我想这样做是因为我需要重载A的一些函数,而根本不改变A代码。谢谢。 最佳答案 快速回答:你没有。这就是protected关键字的用途,如果您想授予对子类的访问权限但不授予其他人的访问权限,则可以使用该关键字。private意味着没有人可以访问这些变量,甚至是子类。如果您根本无法更改A中的代码,则该变量可能存在public/protected访问方法。否则,这些变量不应该从子类中访问,只有hack

c++ - C++ 中有没有办法创建 'super private' 变量?

我有一个C++功能的想法,我想知道是否可以创建。假设我希望“MyClass”中的私有(private)变量只能由公共(public)getter和setter这两个函数访问。也就是说,如果MyClass的另一个公共(public)或私有(private)函数试图获取或更改我的super私有(private)变量的值,我将得到一个编译错误。但是,getter和setter行为正常。有什么想法吗?编辑1:一个用例是让getter/setter执行错误检查或其他形式的逻辑。我什至不希望类本身直接接触变量。编辑2:然后是这样的:templateclassState{private:Tstate

c++ - 为什么在 C++ 中在公共(public)成员之下定义私有(private)成员?

在C++中,有时在类定义中,首先声明公共(public)成员,然后声明私有(private)成员。但是变量或数据成员通常是私有(private)的并由公共(public)方法使用。因此,在这种情况下,使用了变量,但还没有声明。因此代码变得难以理解。但后来我找到了著名的程序员、网站或书籍来声明私有(private)成员。有人知道是什么原因吗? 最佳答案 我这样做是因为我类(class)的用户不关心私有(private)成员,他们对公共(public)API感兴趣(即如何使用我的类(class))。另外,在头文件中,我通常只是声明成员函

c++ - 在内联命名空间 header 中隐藏私有(private)常量

我在头文件的命名空间中包含一些内联函数,目前无法将它们移动到cpp文件中。其中一些内联函数使用魔术常量,例如://Foo.hnamespaceFoo{constintBAR=1234;inlinevoidsomeFunc(){//DosomethingwithBAR}}但是,我想将这些魔术常量设为私有(private)-有什么想法吗?我的第一个想法是使用匿名命名空间://Foo.hnamespaceFoo{namespace{//'private'constantshereconstintBAR=1234;}inlinevoidsomeFunc(){//DosomethingwithB

c++ - 从子类访问私有(private)继承类的名称

以下代码编译失败,使用g++时出现此错误,使用clang时出现类似错误。main.cpp:16:19:error:'QByteArray'isaprivatememberof'QByteArray'Container2(constQByteArray&ba);^main.cpp:3:18:note:constrainedbyprivateinheritancehereclassContainer1:privateQByteArray^~~~~~~~~~~~~~~~~~../edge-clang/qt5/include/QtCore/qbytearray.h:167:21:note:me

c++ - 我应该使用公共(public)变量还是私有(private)变量?

我是第一次做一个大型项目。我有很多类,其中一些具有公共(public)变量,一些具有带有setter和getter方法的私有(private)变量,并且具有两种类型。我决定重写这段代码,主要只使用一种类型。但我不知道我应该使用哪个(仅用于同一对象中的方法的变量始终是私有(private)的,不是这个问题的主题)。我知道公共(public)和私有(private)意味着什么理论,但在现实世界中使用的是什么,为什么? 最佳答案 private数据成员通常被认为是好的,因为它们提供了封装。为它们提供getter和setter会破坏这种封装

C++11:为什么私有(private)成员模板可以在类外访问?

我只是碰巧发现可以使用using指令直接在封闭类之外访问嵌套的私有(private)模板类:classwrapper{private:templateclass__tklass{};class__klass{};};templateusingtklass=wrapper::__tklass;//ExpectederrorbutcompilesOK//usingklass=wrapper::__klass;//"Error:__klassisprivate"intmain(){tklassv1;//ExpectederrorbutcompilesOK//wrapper::__tklass

c++ - protected 和私有(private)有什么区别?

这个问题在这里已经有了答案:WhatisthedifferencebetweenprivateandprotectedmembersofC++classes?(19个回答)关闭1年前。我不明白protected和私有(private)成员或方法之间的区别,因为我认为两者都会隐藏要从类外部访问的成员或函数。protected关键字和私有(private)关键字有什么区别? 最佳答案 private-只能在定义它们的类中访问。protected-在定义它们的类和从该类继承的其他类中可访问。

c++ - 隐藏私有(private)数据成员? (C++)

有没有办法在cpp文件中向用户隐藏C++类的私有(private)数据成员?我认为私有(private)成员是实现的一部分,在头文件中声明它们似乎有点倒退。 最佳答案 “pimpl”成语是通常的处理方式。见http://www.gotw.ca/gotw/024.htmhttp://www.gotw.ca/gotw/028.htmhttp://herbsutter.com/gotw/_100/(针对C++11更新) 关于c++-隐藏私有(private)数据成员?(C++),我们在Stac

c++ - c++中私有(private)复制构造函数有什么用

人们为什么要定义一个私有(private)的拷贝构造函数?何时将复制构造函数和赋值运算符设为私有(private)是一个好的设计?如果类中没有指向唯一对象(如文件名)的指针或句柄的成员,那么在其他情况下,私有(private)复制构造函数是个好主意吗?同样的问题适用于赋值运算符。鉴于大多数C++都围绕对象的复制和通过引用传递,是否有任何涉及私有(private)复制构造函数的好设计? 最佳答案 一个用例是单例模式,其中类只能有一个实例。在这种情况下,您需要将构造函数和赋值operator=设为私有(private),这样就无法创建多