我来自Java背景,并开始使用C++中的对象.但是我遇到的一件事是人们经常使用指向对象的指针而不是对象本身,例如这个声明:
Object *myObject = new Object;
Run Code Online (Sandbox Code Playgroud)
而不是:
Object myObject;
Run Code Online (Sandbox Code Playgroud)
或者,不要使用函数,比如说testFunc():
myObject.testFunc();
Run Code Online (Sandbox Code Playgroud)
我们要写:
myObject->testFunc();
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚为什么我们这样做呢.我认为它与效率和速度有关,因为我们可以直接访问内存地址.我对吗?
这段代码给了我不完整的类型错误.问题是什么?一个类不允许拥有自己的静态成员实例吗?有没有办法达到同样的效果?
struct Size
{
const unsigned int width;
const unsigned int height;
static constexpr Size big = { 480, 240 };
static constexpr Size small = { 210, 170 };
private:
Size( ) = default;
};
Run Code Online (Sandbox Code Playgroud) 我是C++的新手并且有一个问题:
比较以下代码:
class Node {
public:
int data;
Node* x;
};
Run Code Online (Sandbox Code Playgroud)
和
class Node {
public:
int data;
Node x;
};
Run Code Online (Sandbox Code Playgroud)
我知道代码的第二部分无法通过编译.但我想知道原因.
它与内存分配或语法规则有关吗?
如果有人能解决我的问题,我将不胜感激.
我遇到了这样的问题:更新
class A
{
public:
A(){}
int i;
B b;
};
class B
{
public:
B(){}
int j;
A a;
};
Run Code Online (Sandbox Code Playgroud)
当我在一个.h文件中定义它时,它会出错.我认为问题是递归定义.但有人可以帮我解决这个问题吗?
error C2146: syntax error : missing ';' before identifier 'b' c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\xingyo\documents\visual studio 2010\projects\cppalgo\recudef\test1.h 9 1 RecuDef
我的问题陈述如下.存在"域"的概念,其由许多"子域"组成.现在,这些子域本身就是域.以下是我可以做的事情的基本方法.我可以使用auto_ptr或其他东西,但现在暂时离开.
class Domain
{
private:
Domain* subdomains;
}
Run Code Online (Sandbox Code Playgroud)
但是,我能够编译并运行以下程序,我认为它做了同样的事情并给了我想要的东西.
#include <iostream>
#include <vector>
#include <string>
class Domain
{
private:
std::string name_;
public:
std::vector<Domain> subdomains;
Domain(std::string name) : name_(name) {};
std::string name() {return name_;}
void addSubDomain(std::string subDomainName);
};
void Domain::addSubDomain(std::string subDomainName)
{
subdomain.push_back(Domain(subDomainName));
}
int main()
{
std::cout<<"Hello, World"<<std::endl;
Domain domain("wow");
domain.addSubDomain("wow-child");
std::cout<<"Domain name is "<<domain.name()<<std::endl;
std::cout<<"Subdomain name is "<<domain.subdomain[0].name()<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行它的输出是
$./main
Hello, World
Domain name is wow
Subdomain name is wow-child
Run Code Online (Sandbox Code Playgroud)
我的问题是,在实施以下内容时,我是否有任何陷阱?现在,我看不到任何东西.如果没有陷阱,那么这对我的问题来说是一个非常好的解决方案.
编辑
如果这不是一个解决方案,那么还有另一个我可以使用的解决方案,它不涉及原始指针的管理吗?
尝试创建简单的父/子节点类,但遇到不允许不完整类型的错误。为什么?
class Node {
public:
Node ParentNode; //Error on this line
string NodeName;
Node(Node *node) : ParentNode(*node) {
}
};
Run Code Online (Sandbox Code Playgroud) 我是 C++ 编程的新手。这是我的代码:
#ifndef NODE_H
#define NODE_H
class Node
{
public:
Node();
Node(int);
virtual ~Node();
Node(const Node& other);
int getValue() { return value; }
void setValue(int val) { value = val; }
Node getPrev() { return prev; }
void setPrev(Node val) { prev = val; }
Node getNext() { return next; }
void setNext(Node val) { next = val; }
private:
int value; //!< Member variable "value"
Node prev; //!< Member variable "prev"
Node next; //!< Member variable "next"
}; …Run Code Online (Sandbox Code Playgroud) 我想用 C++ 实现一个通用的树结构 - 带有类!- 这棵树由一个键(在我的例子中是一个整数)和一个 leftChild 和 rightChild 属性组成,它们应该与树本身具有相同的类型
\n\n在 CI 中可以这样做:
\n\ntypedef struct avl {\n int key;\n int bf;\n struct avl *leftChild;\n struct avl *rightChild;\n} AVLTree;\nRun Code Online (Sandbox Code Playgroud)\n\n我在我的 C++ 代码中尝试了以下操作:
\n\nclass MTree {\n public:\n int key;\n int bf;\n\n MTree leftChild;\n MTree rightChild;\n\n MTree() {}\n ~MTree() {};\n }\nRun Code Online (Sandbox Code Playgroud)\n\n但它不起作用,并且给我以下错误消息:
\n\nmtree-ops.cpp:12: error: field \xe2\x80\x98leftChild\xe2\x80\x99 has incomplete type
mtree-ops.cpp:13: error:error: field \xe2\x80\x98rightChild\xe2\x80\x99 has incomplete type
所以你看,看起来我不能说我的类有它自己类型的属性,因为这就像试图引用定义时并不真正存在的东西。如何使用 C++ 类来完成此操作?
\n是否可以在C++中创建同一个类的子成员?就像是
class A
{
public:
int i;
A child;
};
Run Code Online (Sandbox Code Playgroud)
提前致谢.
C++ 类是否有可能像我们在 Java 中一样包含自己类型的实例?例如,这样的事情:
public class A {
private A a1;
private A a2;
A getA1(){
return a1;
}
A getA2(){
return a2;
}
void setA1(A a1){
this.a1 = a1;
}
void setA2(A a2){
this.a2 = a2;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在 C++ 中做同样的事情或解决方法。
c++ ×11
c++11 ×2
class ×1
declaration ×1
header ×1
nested-class ×1
object ×1
pointers ×1
stdvector ×1
structure ×1