我有一个抽象的基类,其中包含一个私有嵌套实现.当我尝试实例化非抽象嵌套实现时,visual c ++给出了以下错误:
错误C2259:'node :: empty_node':无法实例化抽象类(第32行)
据我所知,我已经覆盖了基类的所有抽象成员
代码如下:
using namespace boost;
template<typename K, typename V>
class node {
protected:
class empty_node : public node<K,V> {
public:
bool is_empty(){ return true; }
const shared_ptr<K> key() const { throw empty_node_exception; }
const shared_ptr<V> value() const { throw empty_node_exception; }
const shared_ptr<node<K,V>> left() const { throw empty_node_exception; }
const shared_ptr<node<K,V>> right() const { throw empty_node_exception; }
const shared_ptr<node<K,V>> add(const shared_ptr<K> &key, const shared_ptr<V> &value) const {
return shared_ptr<node<K,V>>();
}
const shared_ptr<node<K,V>> remove(const shared_ptr<K> …Run Code Online (Sandbox Code Playgroud) 我有一个关于成员内部类的顶级类的可访问性的查询.我刚刚读到了本地或匿名内部类只能访问最终变量的原因.原因是JVM将这两个类作为完全不同的类处理,因此,如果一个类中的变量值发生变化,则无法在运行时反映出来在另一个类文件中的时间.
然后,我的问题是内部成员类(非静态)如何能够访问顶级类成员的成员,因为JVM仍然将这两个类视为不同的类文件?如果顶级类的成员变量的值发生变化,那么如何在运行时反映内部类的类文件呢?
我正在阅读有关创建类和嵌套类的内容,以确定哪种方法适合我的需求,但我找不到类似于我需要的东西(或者无法理解它;)).
我会给你们一个(几乎)真实的例子:
假设我拥有一家生产各种车辆的工厂.所以,我的命名空间就是Factory我的身材.
现在,让我们说工厂制造汽车,船只和飞机.所以我将Factory使用这些名称为我的命名空间添加三个类.
这是我理解其他方法的问题所在:
我在三种类型的车辆之间有一些共同点.例如,它们都有一个引擎(可能是不同的HP或我理解的形状是引擎的属性,但它们都有引擎).此外,汽车和飞机有门(有时船也有).另一方面,它们也有一些独特的东西(例如飞机有螺旋桨可能有不同的尺寸或形状).
有人可以描述一下我在代码中所说的内容,以便了解它们之间的区别吗?
该程序在TC++ 3.0上编译和运行.
为什么这个程序不能在VC++ 2008Express中编译?
#include <iostream>
using namespace std;
class MyClass
{
private:
class MyNestedClass
{
private:
int myInteger;
public:
MyNestedClass(int a)
{
myInteger = a;
}
void Show()
{
cout<<myInteger;
}
};
};
int main()
{
MyClass::MyNestedClass myNestedClassObject(100);
myNestedClassObject.Show();
}
Run Code Online (Sandbox Code Playgroud)
显示以下消息:
1>------ Rebuild All started: Project: Test, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'Test', configuration 'Debug|Win32'
1>Compiling...
1>Static_Data_Member.c
1>c:\program files\microsoft visual studio 9.0\vc\include\cstdio(39) : error C2143: syntax error : missing '{' before ':'
1>c:\program …Run Code Online (Sandbox Code Playgroud) 假设我创建了这个Test类的实例,它使用嵌套类启动一个新的Thread:
public class Test
{
private String _str;
public Test()
{
_str = "Hello world !";
new TestThread().start(); // Start a background thread
}
private class TestThread extends Thread
{
public void run()
{
while (true)
{
System.out.println(_str);
Thread.sleep(1000);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除对我的Test实例的任何强引用,会发生什么?后台线程仍然存在,并将继续打印_str变量,但我担心GC可以随时收集它.
当然我可以创建引用的本地副本(使用构造函数:public TestThread(String str)并将其存储在局部变量中)但我不知道这是否有必要.
CSS中的嵌套类
.wrapper .widecolumn {
width: 983px;
}
Run Code Online (Sandbox Code Playgroud)
可以在SCSS中重新播放
.wrapper {
.widecolumn {
width: 983px;
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何表示这个?:
.wrapper.widecolumn {
width: 983px;
}
Run Code Online (Sandbox Code Playgroud) 如果我在java中的静态嵌套类中定义一个成员变量,如下所示:
public class Outer {
public static class StaticNestedClass {
private int mMember = 3;
}
}
Run Code Online (Sandbox Code Playgroud)
mMember会被解释为静态因为它的类是静态的吗?java中的静态嵌套类成员怎么样?
提前致谢.
我想创建一个内部类,参数化外部类的类型.
我应该首先说,我意识到可能有更好的方法来实现我想要的结果,我愿意接受那些建议,但我将描述现状:
我有一个类Node<T>和一个内部类声明的尝试如下:
public class Node<T> {
...
class NodeIterator<Node<T>> implements Iterator {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这会在编译期间导致语法错误,我推断这是由于我使用外部类,虽然我不确定这一点.
谢谢!
我刚刚开始学习Java教程,我决定花一些时间玩嵌套类.
我制作的工作副本是一个Bicycle类,其中可以包含零个或多个Rider类实例.在Bicycle的一个实例中,我希望能够与Riders的实例一起工作.
在下面的例子中,我的Bicycle有一个ArrayList来保存它的Riders,但我想避免在可能的情况下维护这个列表.
我的问题是这个.还有另一种方法来引用骑自行车的Rider实例,还是我必须维护自己的列表?
//Outer Class contains zero or more Inner Classes
public class Bicycle {
//ArrayList of Inner Class instances
private List<Rider> Riders = new ArrayList<Rider>();
class Rider {
private String riderName;
protected Rider(String newRiderName) {
this.riderName = newRiderName;
}
protected String GetRiderName(){
return riderName;
}
}
//When creating an Outer Class, we can instantiate zero or more Inner Classes, by name
public Bicycle(String... startingRiderName) {
//Loop through all Inner Class instance names and create an Inner Class for …Run Code Online (Sandbox Code Playgroud) 我知道将一个类嵌套在另一个类中并不是一个好习惯,但是以下只是为了好玩.
我有以下代码
namespace PlayIt
{
class Class1
{
class Class2 : Class1
{
}
}
class SomeOtherClass
{
Class1 objClass1 = new Class1();
Class2 objClass2 = new Class2();
}
}
Run Code Online (Sandbox Code Playgroud)
我能够创建class1的对象而不是class2的对象,为什么呢?有没有办法访问class1之外的class2
我有一个类Outer和一个嵌套类Inner.Inner有一个方法'print',它试图访问类Outer的数据成员.代码编译得很好,但是当我尝试运行程序时出现了分段错误错误.
#include <iostream>
class Outer{
public:
Outer();
~Outer();
class Inner{
public:
Inner(Outer *parent){}
void print(){std::cout<< parent-> data <<std::endl;}
private:
Outer *parent;
};
Inner *obj;
private:
int data;
};
Outer::Outer(): data(99), obj(new Inner(this)){}
Outer::~Outer(){delete obj;}
int main(){
Outer outer;
outer.obj->print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不确定是什么问题,因为我已经将'this'指针传递给内部对象.
代码使用c ++ 11标志用g ++ 4.8.2编译.