当涉及到"问题线"的"隐藏特征"时,没有C++的爱吗?想我会把它扔出去.C++的一些隐藏功能是什么?
您从经验中学到了哪些与C++相关的习语,误解和陷阱?
一个例子:
class A
{
public:
char s[1024];
char *p;
A::A()
{
p = s;
}
void changeS() const
{
p[0] = 'a';
}
};
Run Code Online (Sandbox Code Playgroud)
即使知道changeS是一个const成员函数,它也在改变对象的值.因此const成员函数只意味着它将所有变量视为const,并不意味着它实际上将所有成员保持为const.(为什么?成员函数上的const关键字将char*p视为char*const p;而不是const char*p;
因此,这意味着p不能指向别的东西.而不是你不能改变p的数据.
C++是一门很棒的语言(imho).
但是从C++开始,作为一种全新的语言学习,你会建议哪种形成路径?
书籍,网站,任何可以加速学习而不需要知识和理解记忆和混淆的东西.确实是一条路径,它以结构化的方式导致C++知识和理解.
可能吗?
我问这个问题,因为我的一个朋友(php程序员)问我如何正确(和更好)开始学习C++.
编辑:
感谢大家的关注和合意答案.我正在接受菲尔的那个,因为在我看来,它非常反映了什么是更好的方法的理想.
但真的感谢大家的链接,意见和答案.他们很棒.
有谁知道如何使用void指针生成2D数组而不是int指针?
对于整数指针,我这样做:
int **m;
m = new int* [row];
for(int i=0; i< row; i++)
m[i] = new int[col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
m[i][j] = rand () % 10;
Run Code Online (Sandbox Code Playgroud)
如果指针类型为void***m怎么办?
我怎样才能像int那样定义存储?例如.(m = new int*[row];)
谢谢你的帮助.
请允许我更明确地指出我的问题,我给出了这些:
class Matrix
{
public:
Matrix();
Matrix(int,int);
void printMatrix();
private:
int row;
int col;
void***m;
void initMatrix(); // Initialize the storage for row and column
void generateMatrix (); // construct a 2D …Run Code Online (Sandbox Code Playgroud)