今天我很惊讶地发现了这一点
A = {1,2,3}
Run Code Online (Sandbox Code Playgroud)
和
B = {1,2,3,}
Run Code Online (Sandbox Code Playgroud)
在MATLAB中都是有效的语法.我原以为第二个语句会产生错误.尽我所知,他们生成相同的单元格数组(all([A{:}]==[B{:}])返回true).
有没有理由允许第二种语法?这是解析器中的错误吗?是A与B真正的一样吗?
有趣的是,以下是不合法的:
C = {1,2,3,,,}
Run Code Online (Sandbox Code Playgroud) 我可以使用以下签名重载括号运算符:
char& operator()(const int r, const int c);
Run Code Online (Sandbox Code Playgroud)
这个用途的目的是:
// myObj is an object of type MyClass
myObj(2,3) = 'X'
char Y = myObj(2,3);
Run Code Online (Sandbox Code Playgroud)
这符合我的预期.但是,在处理指针时使用括号运算符会变得复杂.我想要做:
// pMyObj is a pointer to an object of type MyClass
pMyObj->(2,3) = 'X';
char Y = pMyObj->(2,3);
Run Code Online (Sandbox Code Playgroud)
但是,这种语法会产生错误Error: expected a member name(至少在VisualStudio中).
下面的确有效,但对于我来说,除了参数之外还有更多的括号和更多的括号.
char X = (*pMyObj)(2,3);
Run Code Online (Sandbox Code Playgroud)
有没有办法使用->运算符来调用()重载?
如何为具有接口成员变量的类编写复制构造函数?
例如:
public class House{
// IAnimal is an interface
IAnimal pet;
public House(IAnimal pet){
this.pet = pet;
}
// my (non-working) attempt at a copy constructor
public House(House houseIn){
// The following line doesn't work because IAnimal (an interface) doesn't
// have a copy constructor
this.pet = new IAnimal(houseIn.pet);
}
}
Run Code Online (Sandbox Code Playgroud)
我被迫有一个混凝土Animal吗?如果是这样的话,似乎重复使用课程与狗的房子与猫的房子变得错综复杂!
我正在扩展SQLiteOpenHelper课程.我的构造函数是
public MyDatabaseHelper(Context context) {
super(
context, // ???
"MyDatabase.db", // Database name
null, // Cursor factory
1 // database version
);
}
Run Code Online (Sandbox Code Playgroud)
SQLiteOpenHelper构造函数对上下文信息做了什么?
对于我的应用程序,无论程序状态(上下文)如何,构造函数的行为都相同.我可以在没有任何未来问题的情况下传递null吗?
考虑以下两个类:
class LunchBox
{
public:
std::vector<Apple> m_apples;
};
Run Code Online (Sandbox Code Playgroud)
和
class ClassRoom
{
public:
std::vector<Student> m_students;
};
Run Code Online (Sandbox Code Playgroud)
这些类是相似的,因为它们都包含对象的成员变量向量; 然而,它们是不相似的,因为向量的对象是不同的,并且成员变量具有不同的名称.
我想写一个模板,它接受LunchBox或ClassRoom作为模板参数(或其他一些参数)和相同类型的现有对象(类似于a std::shared_ptr).模板将返回一个对象,该对象添加了一个getNthElement(int i);成员函数以改进对方法的访问.用法如下:
// lunchBox is a previously initialized LunchBox
// object with apples already pushed into m_apples
auto lunchBoxWithAccessor = MyTemplate<LunchBox>(lunchBox);
auto apple3 = lunchBoxWithAccessor.getNthElement(3);
Run Code Online (Sandbox Code Playgroud)
我想这样做而不为每个类编写模板特化(这可能需要指定成员变量以某种方式操作).最好,我不想修改LunchBox或ClassRoom类.写这样的模板有可能吗?
我试图制作一个自适应的"约等于"方法(用C#编写,但问题是一般的)接受两个双精度并返回一个布尔值,如果它们是"大致相等"或不是.通过自适应,我的意思是:
1.234和1.235 ==> TRUE
但
1.234567和1.234599 ==> FALSE
也就是说,"约等于"的准确性适应数字的精确性.
我找到了一个四舍五入的概念如何找到两个变量大致相等?但是仍然有一个开放性的问题,即如何使用epsilon.
是否有人知道这类问题的最佳做法?提前致谢!
编辑:我的初步问题没有包含足够的信息,我想要得到什么.抱歉,我的道歉.我想要一个程序,它可以将更高的准备数量处理到更高的标准,同时对更低的准确数量更宽松.对的更多例子是(其中'(0)'是隐含的零):
1.077和1.07(0)返回false(因为77与70非常不同)
1.000077和1.00007(0)返回false(因为77与70非常不同)
1.071和1.07(0)返回true(因为71接近70
1.000071和1.00007(0)返回true(因为71接近70)
无论实现代码如何,我都假设会有某种"容差"变量来确定什么是"非常不同"和什么是"接近".
我想知道如何在数组的每个元素上应用构造函数,然后返回构造对象的数组.具体来说,我正在使用C#TreeNode.我想要的概念如下:
string[] animals = {"dog","cat","mouse"};
TreeNode[] animalNodes = TreeNode[](animals);
Run Code Online (Sandbox Code Playgroud)
哪里TreeNode[](animals)会产生累积效应
animalNodes[0] = TreeNode("dog");
animalNodes[1] = TreeNode("cat");
animalNodes[2] = TreeNode("mouse");
Run Code Online (Sandbox Code Playgroud)
我知道我可以foreach手动加载这样的结构,但如果可能的话,我正在寻找优雅的"一线"方式.我看起来很长很难,但是找不到任何东西.
指针如何与面向对象编程的概念一起使用?
据我了解(并且请注意,我被归类为ID-10T),OOP的主要原则是遏制并保持管理责任(内存/实现/等)包含在类中; 但是当一个对象的方法返回一个指针时,我们似乎正在" 弹出 "该对象.现在,有人可能需要担心:
const可能会解决这个问题)这似乎对象的用户现在需要知道多少更多关于类是如何工作的,什么阶级期望用户的.感觉就像是一只"淘汰猫咪"的情景,似乎在面对OOP时是一种打击.
注意:我注意到这是一个与语言无关的问题; 但是,在C++环境中工作时,我被提示提出问题.
c++ ×4
arrays ×2
c# ×2
syntax ×2
templates ×2
android ×1
approximate ×1
cell-array ×1
constructor ×1
database ×1
equals ×1
interface ×1
java ×1
matlab ×1
oop ×1
operators ×1
parentheses ×1
pointers ×1
sqlite ×1