我正在学习Objective-C,并且拥有C/C++背景.
在面向对象的C++中,总是需要在定义(实现)它之前声明方法,即使它是在父类中声明的.
在过程式C,IIRC中,只要定义一个函数,只要从同一个编译单元中的其他东西(即同一个文件)调用它就可以远离文件中的某个函数(嗯,提供)你没有在其他地方用"extern"声明它.
现在,在Objective-C中,您似乎只需要在头文件中声明选择器,如果它们将被外部使用,并且您可以在.m文件中组合选择器就好了,并在其中调用它们.m文件.此外,似乎永远不会(重新)定义委托方法或继承的方法.
我是在正确的轨道上吗?什么时候需要在Objective-C中定义一个选择器?
我最近在玩GNU Bison的时候看过这样的一些函数定义:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
Run Code Online (Sandbox Code Playgroud)
为什么self括号外的类型?这是有效的C吗?
有人能给我一个单一责任原则的例子吗?我试图理解,在实践中,一个班级有一个单一的责任,因为我担心我可能每天都违反这条规则.
oop single-responsibility-principle definition design-principles solid-principles
在C++中,可以分离函数的声明和定义.例如,声明一个函数是很正常的:
int Foo(int x);
Run Code Online (Sandbox Code Playgroud)
在Foo.h贯彻它Foo.cpp.是否有可能与lambdas做类似的事情?例如,定义一个
std::function<int(int)> bar;
Run Code Online (Sandbox Code Playgroud)
在以下内容中bar.h实现它bar.cpp:
std::function<int(int)> bar = [](int n)
{
if (n >= 5)
return n;
return n*(n + 1);
};
Run Code Online (Sandbox Code Playgroud)
免责声明:我在C#中有使用lambdas的经验,但我没有在C++中使用过它们.
构建解决方案/项目/计划意味着什么?我想确保我的定义是正确的(所以我在谈话时听起来不像个白痴).在IDE的,你可以(纠正我,如果我错了)编译源代码/编程码成计算机可读的机器代码.您可以调试程序,这基本上是通过程序逐步执行并查找错误.
但是,构建一个程序究竟做了什么呢?在VS中,我知道在构建程序时,它会在调试文件夹中生成一个可执行文件.
关于构建程序意味着什么的任何核心技术定义?
要么我非常疲倦,要么发生一些我不知道的奇怪事情,因为下面的代码在链接时导致Foo :: A和Foo :: B的未定义符号.这可以从一个更大的项目中尽可能地减少,但显示了我正在看的内容的本质.
#include <algorithm>
struct Foo
{
static const int A = 1;
static const int B = 2;
};
int main()
{
return std::min(Foo::A, Foo::B);
}
Run Code Online (Sandbox Code Playgroud)
没有std :: min函数模板它工作正常,即只返回Foo :: A. 在类/结构之外定义静态int时也很好(在这个简单的例子中是全局的).但是,只要他们像这样,链接器就找不到它们.
有人能解释发生了什么吗?
c++ initialization definition static-members undefined-symbol
堆是树数据结构,其中树的较高级别总是包含比较低级别更大(或更小,如果它设置的那样)值."堆"是一堆程序可用于动态分配的空闲RAM.它们都被称为"堆",但是那个与另一个有什么关系呢?
当我们用Java,Vala或C#设计类时,我们将定义和声明放在同一个源文件中.但在C++中,传统上优先将两个或多个文件中的定义和声明分开.
如果我只使用头文件并将所有内容放入其中,如Java,会发生什么?是否存在性能损失?
definition ×10
c++ ×3
declaration ×3
api-design ×1
build ×1
c ×1
c++11 ×1
function ×1
header-files ×1
heap ×1
java ×1
javabeans ×1
javascript ×1
lambda ×1
memory ×1
objective-c ×1
oop ×1
php ×1