我是C++新手,我有多年的面向对象语言的经验,比如C/C#/Objective-C。现在,我正在学习C++。
我看到了这段C++代码:
class World : public State
{
};
似乎类World公开继承了类State。公开子类化?这很难理解。
这个特性的概念是什么?这在什么时候是有用的或者是必需的呢?
在继承C++中的类时,用户可以指定访问说明符,如
class Base
{
public int mem1;
protected in mem2;
};
class Derived1 : **private** Base
{
// mem1 will be private here.
// mem2 will be private here.
};
class Derived2 : **protected** Base
{
// mem1 will be protected here.
// mem2 will be protected he
在C++中模拟最终类时,为什么使用“虚拟”关键字?C++程序,没有任何编译错误来演示可以创建最终类的实例
#include <iostream>
using namespace std;
class Final;
class MakeFinal {
private:
MakeFinal() { cout << "MakeFinal constructor" << endl; }
friend class Final;
};
class Final : virtual MakeFinal {
public:
Fin
有人刚刚问我这个问题,但我是一名C#程序员,我只知道类继承……我想知道这个东西是只针对C/C++的吗?引用继承是不是意味着我们先创建一个ClassA,然后再从这个ClassA继承ClassB?它们到底是什么?
=====编辑以清楚地说明:
这是我的朋友在做C编程测试时得到的问题上下文:
"There are two types of inheritance: inheritance by value and inheritance by reference. Show how to design a class to implement inheritance by reference
最近,在阅读了编程语言和实践书中的一些文章后,人们提到,Java中的多接口继承并不像C++中的多类继承那样存在相同的问题。
但我不明白为什么会这样。在C++实现中存在错误时,java如何能够使用多接口继承??
是否有一种方法来替代C++中的多重继承以避免实现问题?
为了使最后一项声明更加具体,让我们说我们有:
class A {...};
class B : public A {...};
class C : public A {...};
class D : public B, public C {...};
那么D类继承了B,C类,它们都继承了A类,所以如果A有一个字段变量,那么B,C会有
不知道我搞错了什么。我对继承还不熟悉。包括我得到的所有错误:
21 7 D:\My C++ programs\inheritance.cpp [Error] redefinition of 'class Sharad'
5 7 D:\My C++ programs\inheritance.cpp [Error] previous definition of 'class Sharad'
D:\My C++ programs\inheritance.cpp In function 'int main()':
27 2 D:
C++具有虚函数,其中调用虚函数将在运行时在vtable中查找函数地址。
C++也有虚拟的基础。访问虚拟库的数据成员将在运行时查找vtable的偏移量。
为什么C++缺少虚拟数据成员?访问一个将在vtable中查找与虚拟基相同的偏移量,但数据成员将由派生的
virtual void fun();
virtual int val;
void fun() override;
int val override;
我用XCode编写了以下C++代码,给出了两个我无法理解的错误:
#include <iostream>
class Buch{
public:
Buch (long int nummer = 0, char autor[25] = (char*)"", int jahr = 0, bool ausgel = false);
long int getNr();
int getJahr();
protected:
long int __nummer;
char __autor[25];
int
我正在尝试使用C++/WinRT创建一个简单的xaml应用程序。
我来自WPF背景,在那里,有一个实现INotifyPropertyChanged并让其他类继承它的基类是很常见的。
当我试图对C++-WinRT做同样的操作时,我失败了,但出错了。
error MIDL4006: [msg]A runtime class can derive only from a composable runtime class.
下面是相关代码的其余部分供参考:
ObservableObject.idl:
namespace Example
{
runtimeclass ObservableObje
与此错误消息的其他示例不同,我已经有了指向A的指针,并希望检索实际的子类。
这种安排是某些C++包装的C代码的一部分,A是一些POD C结构(为什么没有动态cast),而test是C中调用C++功能并检索正确对象的回调,应该使用强制转换。但是为了防止C++用户代码扰乱code,我想要继承protected。
MSVC不抱怨这一点,但g++抱怨!?从标准的角度来看,哪一个是正确的?为什么?
#include <iostream>
using namespace std;
// plain C structure
struct A{
int i;
};
// some C
给定一个C++类:
template<typename T>
class A {
public:
int a;
T x;
int getA() {return a;}
};
模板专门化是否可以“继承”(没有实际的C++继承)成员,比如A和getA()?此外,在为类编写大量模板专门化的代码时,我是否应该多次键入相同的代码(这有点违背了模板的全部用途),还是对类进行结构调整,使其能够适应专门化(例如,将另一个模板类成员封装在其中,使专门化仅限于该类)?
我正在尝试c++中的继承,并试图创建一个简单的类:
class Class
:public int
{
};
但是在试图编译时,我得到了(visual 2013)错误C3770 "'int‘不是一个有效的基类,这个错误也发生在其他原始类型,比如bools、chars和long。
但是,使用用户定义的类包装类可以正常工作:
template<typename T>
class Wrapper
{
T Object;
public:
operator T&(){return Obj
我有一个从C++移植到Java的应用程序。有一段C++代码,我觉得很奇怪。
typedef std::string ArgName;
typedef std::map< ArgName, AnyData > ArgumentMap;
class Arguments : public ArgumentMap
{
public:
// Very important note: When read finds a numeric/set argument,
// it sets anyData.kind to Int. But STILL, it fills a
我知道如何在C++中做到这一点:
class myClass : public baseClass1 private baseClass2 ...
我如何在C#中做同样的事情?
这就是我到目前为止在C#中所拥有的
public class myClass : baseClass1, baseClass2
如何指定baseClass2是私有的?