引用 1176764177:实际上C++98并不比C语言难多少,C++11有点杂糅的感觉,并且很多东西还用不了,这个比较蛋疼。
我看了几天c++表示不是特难理解啊
为啥都说c++很难学难道是因为mfc么
我反正只是用c++给mcu
MFC难学主要是因为把WinMain给封装起来了,并且有很多特殊的元素,然后想要更高级的操作还要学WinAPI和COM等很多东西。
<code class="lang-cpp">MyClass &operator=(const MyClass& src) { cout << "operator=" << endl; Dispose(); // 【不能处理自赋值情况】 CopyFrom(src); return *this; }</code></pre><pre data-tag="nkcsource" data-type="pre"><code class="lang-cpp">// MyRefClass.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string.h> #include <stdio.h> #include <iostream> using namespace std; class MyClass { // 引用类的写法 private: void CopyFrom(const MyClass& src) { cout << "copyfrom" << endl; if (src.pm_obj != NULL) { src.pm_obj->m_refcount++; // 当复制时增加计数并引用源对象 this->pm_obj = src.pm_obj; } } void Dispose() { cout << "dispose" << endl; if (this->pm_obj != NULL) { if (--this->pm_obj->m_refcount <=0) 当析构时减少计数 { disposedata(); 若计数减少到零则销毁对象 delete this->pm_obj; this->pm_obj = NULL; } } } // TODO: 真正的初始化函数(自己写) void InitData(char *str1){ cout << "initdata" << endl; this->pm_obj->resource = new char [strlen(str1)+20]; strcpy(this->pm_obj->resource, str1); } // TODO: 真正的析构函数(自己写) void DisposeData() { cout << "disposedata" << endl; delete [] this->pm_obj->resource; this->pm_obj->resource = NULL; } public: // Big-3 的固定写法,不用解释 MyClass &operator=(const MyClass& src) { cout << "operator=" << endl; if (&src != this) { // 【更改】不是自赋值的话 Dispose(); CopyFrom(src); } return *this; } MyClass(const MyClass& src) { cout << "copy" << endl; CopyFrom(src); } ~MyClass() { cout << "delete" << endl; Dispose(); } // 构造函数写法 MyClass() { cout << "new()" << endl; this->pm_obj = new MyClassBase; // 新建对象并将计数置为1 this->pm_obj->m_refcount = 1; InitData(""); } MyClass(char *str1) { cout << "new(str)" << endl; this->pm_obj = new MyClassBase; // 新建对象并将计数置为1 this->pm_obj->m_refcount = 1; InitData(str1); } // Dup函数(传统复制函数)可以不写 MyClass Dup() { cout << "dup" << endl; MyClass temp(this->pm_obj->resource); // 新建一个完全独立的对象并返回 return temp; } // TODO: 此处添加其它成员函数以方便调用 char *GetString() { return this->pm_obj->resource; } void *GetData() { return this->pm_obj; } int GetCount() { return this->pm_obj->m_refcount; } private: // 引用类的变量仅此一份 struct MyClassBase{ int m_refcount; // TODO: 此处添加常规变量以方便保存状态 char *resource; } *pm_obj; }; int _tmain(int argc, _TCHAR* argv[]) { // 测试程序 MyClass a; MyClass b = a; MyClass c; c = b; MyClass d=b.Dup(); printf("%p %p %p %p\n",a.GetData(), b.GetData(), c.GetData(), d.GetData()); printf("%p %p %p %p\n",a.GetString(), b.GetString(), c.GetString(), d.GetString()); printf("%d %d %d %d\n",a.GetCount(), b.GetCount(), c.GetCount(), d.GetCount()); return 0; }</=0)></iostream></stdio.h></string.h></code></code>
[修改于 9年7个月前 - 2015/05/17 13:17:05]
引用 1176764177:实际上C++98并不比C语言难多少,C++11有点杂糅的感觉,并且很多东西还用不了,这个比较蛋疼。
我看了几天c++表示不是特难理解啊
为啥都说c++很难学难道是因为mfc么
我反正只是用c++给mcu
引用 1176764177:C++11向下兼容C++98,不管在哪里用C++98都可以使用,iar应该也支持C++98。
98和11标准相差很大??
iar用的是那个标准?
我一般也就是用函数重载还有能随处定义变量这2点
mfc我没学一般不给pc写程序
要学貌似qt比较万金油吧
引用 .........:至于GUI框架,我觉得如果只在Windows上用的话,用MFC比较好。跨平台的话,用wxWidget或Qt都是可以的。
Qt跨平台优势大。编译器执行标准应该式是可以指定的。
引用 1176764177:其实windows上的程序,跨平台的只是少数,不然linus要高兴死了。
98和11标准相差很大??
iar用的是那个标准?
我一般也就是用函数重载还有能随处定义变量这2点
mfc我没学一般不给pc写程序
要学貌似qt比较万金油吧
引用 金星凌日:C++ Primer里确实有。。。在第421页
我记得C++ Primer里面就有一个例子。
另外,你这个赋值操作符似乎有点问题。
引用 金星凌日:嗯。。。多谢指教
你这个赋值操作符不能处理这样的情况:
MyClass a;
a=a;我记得C++里是要考虑这种问题的。
<code class="lang-cpp">MyClass &operator=(const MyClass& src) { cout << "operator=" << endl; if (&src != this) { // 更改的地方 Dispose(); CopyFrom(src); } return *this; }</code></pre></code>
引用 acmilan:C++我是看某人的blog学的,不是看C++ Primer学的,不是太扎实,标准库都不会用→_→
嗯。。。多谢指教
引用 张静茹:你可以看看C++/CLI的语法,不忍直视→_→
C++语法复杂, :: -> . C#只有 一个 .
引用 1176764177:另外要是给MCU用的话,STL也是非常好用的
98和11标准相差很大??
iar用的是那个标准?
我一般也就是用函数重载还有能随处定义变量这2点
mfc我没学一般不给pc写程序
要学貌似qt比较万金油吧
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。