关于临时对象调用成员函数的问题

各位老师,初学c++,看到《c++ primer》(第五版)第247页时,有一段话说:“当成员函数返回一个类时,返回类型不是引用,则返回值是*this的副本,因此调用成员函数只能改变临时副本。”
这里不太理解,既然临时对象是右值,右值不能通过地址访问,那调用句点运算符就不能传地址给this,为什么右值对象也能调用成员函数呢?请教各位老师。

c++

2个回答

临时对象也是一个对象,相当于*this(假如说是对象a)的对象执行了一次拷贝构造,新生产了一个对象(对象b,除了作用域,跟对象a不一样之外其他的都一样),也是有地址等一系列正常对象有的属性,只是他是属于函数内部构造的
对象,,return之后,就是},这个大括号会清理函数资源,把函数内部的栈内存清理了,也会清理掉这个临时对象(b)会调用析构函数,你得到的也是对象b本身,的各种属性,所以修改的也是对象b,不知道说清楚没

能不能调用成员函数与这个对象是左值还是右值没关系啊,如果是public的成员函数,都是可以调用的。不过如果这个调用发生在类的定义内部,即使成员函数是private的,应该也是可以调用的。

qq_15718789
我最爱吃大白兔 回复sorrowfulxiaoliu: 你误解啦,临时对象在使用时创建,在函数退出时释放,this指针指向本类,调用关系要看非静态成员函数还是静态成员函数。
2 年多之前 回复
qq_34291613
sorrowfulxiaoliu 书上说调用成员函数要请求对象地址初始化this,可是临时对象并没有地址额~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
return一个类对象的时候 调用了复制构造函数 之后再调用析构函数 为何返回的是析构之后的值?

朋友实现了一个String类 其实问题不少 比如NULL传入strlen等,但是最大的问题是很奇怪 main函数执行到S=S1+S2时 单步调试发现加法运算符重载函数中那个类对象temp在执行到return时 作为参数 传给了复制构造函数 这个正常 按理说之后temp会被析构 然后函数的返回值应当是之前被复制构造函数创建的无名临时对象的值,但很奇怪 调试信息说明 返回的居然是temp被析构之后的值。。。 找了很多的资料也没明白 还望高人指点 ``` #define _CRT_SECURE_NO_WARNINGS #define FILE_BUFFER_LENGTH 30000 #include<iostream> #include<cstring> using namespace std; class CMyString { friend std::ostream& operator<<(std::ostream& out, CMyString& rhs); //friend std::istream& operator>>(std::istream& in, CMyString& rhs); public: CMyString() { buf = NULL; } CMyString(const char* rhs) { buf = new char[strlen(rhs) + 1]; strcpy(buf, rhs); } CMyString(const CMyString& rhs) { buf = new char(strlen(rhs.buf) + 1); buf = rhs.buf; } ~CMyString() { cout << "called" << endl; if (buf != NULL) { delete[]buf; } } CMyString& operator=(const CMyString& rhs); CMyString operator+(const CMyString& rhs); private: char* buf; }; ostream& operator<<(std::ostream& out, CMyString& rhs) { out << rhs.buf; return out; } CMyString& CMyString::operator=(const CMyString& rhs) { if (this != &rhs) { if (buf != NULL) delete[]buf; buf = new char[strlen(rhs.buf) + 1]; strcpy(buf, rhs.buf); } return *this; } CMyString CMyString::operator+(const CMyString & rhs) { CMyString temp; temp.buf = new char[strlen(buf) + strlen(rhs.buf) + 1]; strcpy(temp.buf, buf); strcat(temp.buf, rhs.buf); return temp; } int main() { CMyString S1("Good"), S2(" morning"), S3(" evening"), S; S = S1 + S2; cout << S << endl; //S.~CMyString(); system("pause"); return 0; } ```

临时对象到底是不是对象,为什么我的代码会出错?c++

![图片说明](https://img-ask.csdn.net/upload/201812/17/1545051813_33149.png) 代码也贴过来了,希望好心大佬回答一下本人新鸟,没有积分,无法报答,好不意思 #include<iostream> using namespace std; class Box { public: Box(int a = 1)//构造函数 { this->a = a; //初始化数据成员a = 1 } Box operator +(Box &h) //运算符重载+ { return Box(a + h.a);//返回一个临时对象,其数据成员的值为 “+”前后两个对象数据成员的和 } friend void operator <<(ostream &, Box &);//类内声明友元函数,来重载<< private: int a; //私有数据成员 a }; void operator <<(ostream &n,Box &Object)//友元重载函数的类外定义 { n << Object.a; //输出Box对象的数据成员a } int main() { Box A,B; cout << A;// cout 对象A可以 ** cout << A + B;//此处报错,为什么 cout 临时无名对象却不可以??????(错误为:“没有与这些操作匹配的 << 运算符”**) return 0; }

vector中存入一个类成员函数

#include"test.h" class cls_test { vector<int(*)()>vecf; public: cls_test(); int f(); }; cls_test::cls_test() { vecf.push_back(f); } int cls_test::f() { return 20; } int main() { return 0; }

加号运算符重载中匿名对象以及拷贝构造函数和加号运算符重载的问题?

**1.下列程序运行中,stu0103和stu0104的地址和stu0102、stu0101的地址相差比较大。请问为什么,分别存在什么区? 2.请问加号运算符重载中是否调用了拷贝构造函数? ** ``` #include<iostream> #include<string> using namespace std; class Student_t { public: Student_t():Student_t("Lilei",18) {} Student_t(const std::string name,const int age,const int high = 175) :name(name), age(age), high(high) { ** //学生人数++** number_of_stu++; } //成员加号运算符重载 Student_t operator+(Student_t& stu); private: std::string name;//学生姓名 int age;//年龄 int high;//身高 static int number_of_stu;//学生人数 }; extern std::ostream& operator<<(std::ostream& os, const Student_t& stu); //成员加号运算符重载 Student_t Student_t::operator+(Student_t& stu) { return Student_t(this->name + stu.name, this->age + stu.age,this->high + stu.high); } int main() { //堆空间对象 Student_t* stu0101 = new Student_t("C",10); Student_t* stu0102 = new Student_t("X",9); Student_t* stu0103 = &(*stu0101 + *stu0102); cout << *stu0103 << endl; Student_t* stu0104 = &(*stu0101 + *stu0103); cout << *stu0104 << endl; cout << stu0101 << " " << stu0102 << " " << stu0103 << " "<< stu0104<<endl; system("pause"); return 0; } ```

C++函数返回的类类型临时变量讨论

类及函数定义如下: class cat { public: int age; cat(void) { cout<<"void构造函数"<<endl; } cat(int _age) :age(_age) { cout<<"int构造函数"<<endl; } cat(const cat& _cat) :age(_cat.age) { cout<<"复制构造函数"<<endl; } cat& operator=(const cat& _cat) { cout<<"赋值操作符"<<endl; age = _cat.age; return *this; } ~cat() { cout<<"析构函数"<<endl; } }; cat show(cat _cat) { return _cat; } 问题1: 在main()函数中有如下代码: cat cat1; cat1.age = 11; cat cat2; cat2.age = 12; cat cat3 = show(cat2) = cat1; // ok cat3.age=11; show(cat2).age = 13; // error C2106: “=”: 左操作数必须为左值 通过查找资料,show()函数返回的临时变量为右值,不可以直接更改成员变量,但是可以调用成员函数,第一条语句通过调用赋值操作符改变了临时变量。理论上结果就应该是这样。但是,如果注释掉cat类中的所有构造函数、赋值操作符、析构函数,再次执行: int age1 = show(cat2).age = 13; // ok, age11=13. 可以编译通过,不明白是什么问题,请各位解答。 问题2: 执行语句: show(cat1); 输出以及我认为的意义应该是: *************************************************** 复制构造函数 //使用实参初始化形参 复制构造函数 //使用形参初始化函数返回值临时变量 析构函数 //形参析构 析构函数 //函数返回值临时变量析构。 *************************************************** 执行语句:cat cat3 = show(cat1); 输出以及我认为的意义应该是: *************************************************** 复制构造函数 //使用实参初始化形参 复制构造函数 //使用形参初始化函数返回值临时变量 析构函数 //形参析构 *************************************************** 通过对比,我们发现当使用函数返回值初始化cat3时,少执行了一次析构函数,应该是函数返回值临时变量未进行析构。并且使用函数返回值初始化cat3时并没有再次调用复制构造构造函数,就像是给没有名字的函数返回值临时变量赋予了一个名字cat3并延长了生存周期。 再执行语句:cat cat3 = show(cat1) = cat2; 输出以及我认为的意义应该是: *************************************************** 复制构造函数 //使用实参初始化形参 复制构造函数 //使用形参初始化函数返回值临时变量 析构函数 //形参析构 赋值操作符 //cat2赋值给临时变量 复制构造函数 //使用被重新赋值的临时变量初始化cat3 析构函数 //临时变量析构。 *************************************************** 对比上一条语句,如果给临时变量重新赋值之后,再用其初始化cat3,临时变量相当于一个独立的对象,会调用复制构造函数初始化cat3然后析构,生命周期结束。通过查找资料,我知道函数返回值临时变量存储于main()栈帧中,会分配临时变量对象所需要的存储空间,且作用域为mian()函数块。但是为什么会出现这种现象?请各位大神解答。

关于C++中重载赋值操作符(=)返回引用的问题

C++小白一枚,遇到一个问题,查了很多资料还是没有想明白。 书上都说C++在重载赋值操作符(=)时,应该返回一个引用,这是因为能够实现链式赋值:比如a=b=c=1 但是,返回一个临时变量,会出现什么问题呢? 比如 class A{...};中有一个赋值操作符重载,返回A,原型如下: A operator=(const A &); 定义了几个A类的变量 A a,b,c,d; 然后让a有了完整的成员。执行如下表达式: b=c=d=a <=> b=(c=(d=a)) 当d=a完成后,返回一个临时变量,然后c会调用赋值操作符重载的函数,把内部成员进行拷贝,执行结束后,c获得了d相同的内容,然后(d=a)中返回的d的临时变量 释放了,然后把c的临时变量给b,以此类推。 感觉这个过程也不会有什么问题呀。 为什么一定要返回引用呢? 我的想法:是不是因为返回临时变量,会需要一个临时变量的空间,如果是ADT或UDT,可能造成内存浪费或者效率低下?但是这个方法没有语法层面上的问题? 除此以外:如果有一个移动赋值函数,在链式赋值第二次开始,是不是会调用该移动赋值函数呢?这种情况下,对内存空间和效率有影响吗?

求这道题目代码 我只能做这种弹出提示框的 不能把分数和相应错题答案连接到新窗口

![图片说明](https://img-ask.csdn.net/upload/201512/28/1451262890_646273.png) ``` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>测试</title> <SCRIPT language="JavaScript"> function show() { var str = ""; str = str + panduan("score", 0, "第一题回答"); str = str + panduan("score2", 2, "第二题回答"); str = str + panduan("score3", 2, "第三题回答"); str = str + panduan("score4", 0, "第四题回答"); str = str + panduan("score5", 0, "第五题回答"); str = str + panduan("score6", 2, "第六题回答"); str = str + panduan("score7", 3, "第七题回答"); str = str + panduan("score8", 2, "第八题回答"); str = str + panduan("score9", 2, "第九题回答"); str = str + panduan("score10", 1, "第十题回答"); alert(str); } function panduan(name, daan, xinxi) { var jieguo = ""; var jieguo1 = document.getElementsByName(name); if (jieguo1[daan].checked == true) { jieguo = jieguo + xinxi + "正确。\n"; } else { jieguo = jieguo + xinxi + "错误。\n"; } return jieguo; } </SCRIPT> </head> <body> <p>1.写“Hello World”的正确javascript语法是?().</p> <form> <input type="radio" name="score" value="1"/> document.write("Hello World") <input type="radio" name="score" value="2"/>B. "Hello World" <input type="radio" name="score" value="3"/>C. response.write("Hello World")  <input type="radio" name="score" value="4"/>D. ("Hello World")  </form> <br /><br /> <p>2.产生当前日期的方法是 </p> <form> <input type="radio" name="score2" value="1"/>A.Now();  <input type="radio" name="score2" value="2"/>B.Date() <input type="radio" name="score2" value="3"/>C.new Date() <input type="radio" name="score2" value="4"/>D.new Now()  </form> <br /><br /> <p>3.在HTML文档对象模型中,history对象的()用于加载历史列表中的下一个URL页面。 </p> <form> <input type="radio" name="score3" value="1"/>A.next()    <input type="radio" name="score3" value="2"/>B.back() <input type="radio" name="score3" value="3"/>C.forward()  <input type="radio" name="score3" value="4"/>D.go(-1) </form> <br /><br /> <p>4、在Javascript浏览器对象模型中,window对象的()属性用来指定浏览器状态栏中显示的临时消息。 </p> <form> <input type="radio" name="score4" value="1"/>A.status    <input type="radio" name="score4" value="2"/>B.screen   <input type="radio" name="score4" value="3"/>C.history   <input type="radio" name="score4" value="4"/>D.document </form> <br /><br /> <p>5、在Javascript中,可以使用Date对象的()方法返回一个月中的每一天。 </p> <form> <input type="radio" name="score5" value="1"/>A.getDate     <input type="radio" name="score5" value="2"/>B.getYear  <input type="radio" name="score5" value="3"/>C.getMonth <input type="radio" name="score5" value="4"/>D.getTime  </form> <br /><br /> <p>6、在Javascript中要改变页面文档的背景色,需要修改document对象的()属性。 </p>  <form> <input type="radio" name="score6" value="1"/>A.BackColor <input type="radio" name="score6" value="2"/>B.BackgroundColor   <input type="radio" name="score6" value="3"/>C.BgColor   <input type="radio" name="score6" value="4"/>D.Background  </form> <br /><br /> <p>7、在HTML页面中,不能与onChange事件处理程序相关联的表单元素有 </p> <form> <input type="radio" name="score7" value="1"/>A.文本框  <input type="radio" name="score7" value="2"/>B.复选框  <input type="radio" name="score7" value="3"/>C.列表框 <input type="radio" name="score7" value="4"/>D.按钮    </form> <br /><br /> <p>8、下列选项中关于浏览器对象的说法错误的是 </p> <form> <input type="radio" name="score8" value="1"/>A.history对象记录了用户在一个浏览器中已经访问过的URLs    <input type="radio" name="score8" value="2"/>B.location对象相当于IE浏览器中的地址栏,包含关于当前URL地址的信息 <input type="radio" name="score8" value="3"/>C.location对象是history对象的父对象 <input type="radio" name="score8" value="4"/>D.location对象是window对象的子对象 </form> <br /><br /> <p>9、Javascript中制作图片代替按钮的提交效果需要手动提交方法submit(),以下调用正确的是</p> <form> <input type="radio" name="score9" value="1"/>A.submit();   <input type="radio" name="score9" value="2"/>B.myform.submit() <input type="radio" name="score9" value="3"/>C.document.myform.submit()  <input type="radio" name="score9" value="4"/>D.window.myform.submit();  </form> <br /><br /> <p>10、某网页中有一个窗体对象,其名称是mainForm,该窗体对象的第一个元素是按钮,其名称是myButton,表述该按钮对象的方法是  </p> <form> <input type="radio" name="score10" value="1"/>A.document.forms.myButton <input type="radio" name="score10" value="2"/>B.document.mainForm.myButton  <input type="radio" name="score10" value="3"/>C.document.forms[0].element[0]  <input type="radio" name="score10" value="4"/>D.以上都可以  <INPUT TYPE="button" onclick="show();" value="提交"> </form> <br /><br /> <button id="button">得分是</button> <script type="text/javascript"> var sco = document.getElementsByTagName("input"); var butn = document.getElementById("button"); butn.onclick = function () { var gec = 0; for (var i = 0; i < sco.length; i++) { if (sco[i].checked == true) { var sc = parseInt(sco[i].value); gec += sc; } } alert(gec); } </script> </body> </html> ``` 我只能做这种弹出提示框的 不能把分数和相应错题答案连接到新窗口

C++运算符重载问题,为什么重载+-运算符时operator关键字前不需要加&,重载=时operator前必须加&号啊

另外类作为形参传入函数时, 有些情况可以不采用引用传递,但有的时候必须采用引用传递,否则会出错。 比如重载 ARRAY & operator = (ARRAY &b); 能解释下两个&号分别有什么意义吗,谢谢大佬!

我的运算符重载语法对了但是编译通不过

//问题一: 为什么编译过不了, error LNK2019: 无法解析的外部符号 "class Point __cdecl operator*(int const &,class Point const &)" (??D@YA?AVPoint@@ABHABV0@@Z), // 该符号在函数 _main 中被引用 // 把第一个友元函数注释掉就可以通过了(主函数要删掉对应的调用) //问题二: 如何理解输出流?为什么cout<<a<<++a<<endl; 跟 cout<<a; cout<<++a<<endl; 结果不一样? // 是不是先把cout<<后面的所有表达式计算玩了在一次性输出? #include <iostream> using namespace std; class Point { private: int x, y; public: Point(int x = 0, int y = 0) :x(x), y(y){} //构造函数 Point operator++(int); //不能设为常函数,需要改变自身的值,重载后置单目运算符 Point & operator++(); // 重载前置单目运算符 Point operator+(const Point &a)const; //后面的const把函数设为常函数,不可以改变自身的值 (前面加const将把函数返回值设为常量,无法更改值) Point & operator += (const Point &a); //不能设为常函数,需要改变自身的值 Point & operator*=(const int &n); Point operator*(const int &n)const; //重载乘法运算符,后面乘以一个数 friend Point operator*(const int &n, const Point & a); //n*Point 后面不能接const,n和a都是常量了,无需再设成常函数,也不能设成常函数,不是类成员函数 friend int operator *(const Point &a, const Point &b); //坐标点乘 friend ostream &operator<<(ostream &out, const Point &c) { out << "x = " << c.x << " " << "y = " << c.y << endl; return out; } }; int main() { Point a(4, 5); Point b(2, 1); cout << a << a++ << ++a << 4 * a << a * 4 <<( a *= 4); cout << endl; cout << a*b << a + b << (a += b) ; system("PAUSE"); return 0; } Point & Point::operator++() { x++; y++; return *this; } Point Point::operator++(int) { Point old = *this; //保留旧值 this->x++; this->y++; //++(*this); //或者调用前置的 return old; } Point Point:: operator+(const Point &a) const // Point + Point { Point b; //创建临时对象,作为返回值 b.x = x + a.x; b.y = y + a.y; //x+=a.x; --错!!不能改变自身的值 //y+=a.y; return b; } Point Point::operator*(const int &n) const //Point * int { Point b; b.x = x*n; b.y = y*n; //this->x*=n; --错!不能改变自身的值 //this->y*=n; return b; } Point operator*(const int &n, Point & a) // int * Point { return a*n; } Point &Point:: operator +=(const Point &a) //Point += Point { this->x += a.x; this->y += a.y; return *this; } Point &Point:: operator*=(const int &n) //Point *= int { this->x *= n; this->y *= n; return *this; } int operator *(const Point &a, const Point &b) //点乘 { return a.x*b.x + a.y*b.y; }

C++类公司人员管理 运行报错

#include<iostream> #include<string> using namespace std; /*class Data { int year; int month; int day; public: void setyear(int year){ this->year=year; }void setmonth(int month){ this->month=month ; }void setday(int day){ this->day=day; }void getyear(){ cout << year; } void getmonth(){ cout << month; }void getday( ){ cout << day; } };*/ class employee { protected: char *name; //姓名 int individualEmpNo; //个人编号 int grade; //级别 float accumPay; //月薪总额 static int employeeNo; //本公司职员编号目前最大值 //Data data; public: employee(); //构造函数 ~employee(); //析构函数 virtual void pay() = 0; //计算月薪函数(纯虚函数) virtual void promote(int increment); //升级函数(虚函数) virtual void displayStatus() = 0; //显示人员信息(纯虚函数) }; class technician :public employee //兼职技术人员类 { private: float hourlyRate; //每小时酬金 int workHours; //当月工作时数 public: technician(); //构造函数 void promote(int); //升级函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class salesman :virtual public employee //兼职推销员类 { protected: float CommRate; //按销售额提取酬金的百分比 float sales; //当月销售额 public: salesman(); //构造函数 void promote(int); //升级函数 void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; class manager :virtual public employee //经理类 { protected: float monthlyPay; //固定月薪数 public: manager(); //构造函数 void promote(int); //升级函数 void pay(); //计算月薪函数 void displayStatus(); //显示。人员信息 }; class salesmanager :public manager, public salesman //销售经理类 { public: salesmanager(); //构造函数 void promote(int); //升级函数' void pay(); //计算月薪函数 void displayStatus(); //显示人员信息 }; int employee::employeeNo = 1000; //员工编号基数为 employee::employee( ) { char namestr[50]; //输人雇员姓名时首先临时存放在namestr中 cout << "请输入下一个雇员的姓名:"; cin >> namestr; getchar(); name = new char[strlen(namestr) + 1]; //动态申请用于存放姓名的内存空间 strcpy_s(name,51, namestr); //将临时存放的姓名复制到name /*int y, m, d; cout << "请输入该雇员的生日" << endl; cin >> y; data.setyear(y); cin >> m; data.setmonth(m); cin >> d; data.setday(d);*/ individualEmpNo = employeeNo++; //新输入的员工,其编号为目前最大编号加l grade = 1; //级别初值为l accumPay = 0.0; //月薪总额初值为 } employee::~employee() { delete name; //在析构函数中删除为存放姓名动态分配的内存空间 } void employee::promote(int increment) { grade += increment; //升级,提升的级数由increment指定 } technician::technician() { hourlyRate = 100; //每小时酬金元 } void technician::promote(int) { employee::promote(2); //调用基类的升级函数,升级 } void technician::pay() { cout << "请输入" << name << "本月的工作时数:"; cin >> workHours; accumPay = hourlyRate*workHours;//计算月薪,按小时计酬 cout << "兼职技术人员" << name << "编号" << individualEmpNo << "本月工资" << accumPay << endl; } void technician::displayStatus() { cout << "兼职技术人员" << name << "编号" << individualEmpNo << "级别为" << grade << "级,已付本月工资" << accumPay; /*cout << "出生日期为:"; data.getyear(); data.getmonth(); data.getday();*/ } salesman::salesman() { CommRate = 0.04; //销售提成比例% } void salesman::promote(int) { employee::promote(0); //调用基类的升级函数,升级 } void salesman::pay() { cout << "请输人" << name << "本月的销售额:"; cin >> sales; accumPay = sales*CommRate; //月薪二销售提成 cout << "推销员" << name << "编号" << individualEmpNo << "本月工资" << accumPay << endl; } void salesman::displayStatus() { cout << "推销员" << name << "编号" << individualEmpNo << "级别为" << grade << "级,已付本月工资" << accumPay; /*cout << "出生日期为:"; data.getyear(); data.getmonth(); data.getday();*/ } manager::manager() { monthlyPay = 8000; //固定月薪元 } void manager::promote(int) { employee::promote(3); //调用基类的升级函数,升级 } void manager::pay() { accumPay = monthlyPay; //月薪总额即固定月薪数 cout << "经理" << name << "编号" << individualEmpNo << "本月工资" << accumPay << endl; } void manager::displayStatus() { cout << "经理" << name << "编号" << individualEmpNo << "级别为" << grade << "级,已付本月工资" << accumPay; /*cout << "出生日期为:"; data.getyear(); data.getmonth(); data.getday();*/ } salesmanager::salesmanager() { monthlyPay = 5000; CommRate = 0.005; } void salesmanager::promote(int) { employee::promote(2); //调用基类的升级函数,升级 } void salesmanager::pay() { cout << "请输入" << employee::name << "所管辖部门本月的销售总额:"; cin >> sales; accumPay = monthlyPay + CommRate*sales; //月薪二固定月薪+销售提成 cout << "销售经理" << name << "编号" << individualEmpNo << "本月工资" << accumPay << endl; } void salesmanager::displayStatus() { cout << "销售经理" << name << "编号" << individualEmpNo << "级别为" << grade << "级,已付本月工资" << accumPay; /*cout << "出生日期为:"; data.getyear(); data.getmonth(); data.getday();*/ } int main() { manager m1; technician t1; salesmanager sm1; salesman s1; employee *emp[4] = { &m1, &t1, &sm1, &s1 }; //用指针数组的各元素存放各对象的地址 int i; for (i = 0; i<4; i++) { /*依次调用各派生类对象的成员函数,完成各自不同的升 级、计算月薪、显示信息功能。*/ emp[i]->promote(0); emp[i]->pay(); emp[i]->displayStatus(); } return 0; } 一运行 输入姓名之后就报错~我看半天了 都觉得挺对啊 求大神指点

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

NS网络模拟和协议仿真源代码

NS网络模拟和协议仿真源代码,包含代码说明及协议分析

简单的NS3网络模拟仿真(计算机网络作业)

简单的NS3网络模拟仿真,内附有PPT演示。论文评述。以及简单的安装教程。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

cuda开发cutilDLL

包括cutil32.dll、cutil32D.dll、cutil32.lib、cutil32D.lib,以及附带的glew32.lib/freeglut.lib

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Tensorflow与python3.7适配版本

tensorflow与python3.7匹配的最新库,更新了python3.7以后可以自行下载,或者去国外python的扩展包下载界面自行下载。

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

实现简单的文件系统

实验内容: 通过对具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 要求: 1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

四分之一悬架模型simulink.7z

首先建立了四分之一车辆悬架系统的数学模型,应用MATLAB/Simulink软件建立该系统的仿真模型,并输入路面激励为随机激励,控制不同的悬架刚度和阻尼,选用最优的参数得到车辆悬架的振动加速度变化曲线

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

pokemmo的资源

pokemmo必须的4个rom 分别为绿宝石 火红 心金 黑白 还有汉化补丁 资源不错哦 记得下载

test_head.py

本文件主要是针对使用dlib的imglab标注工具标记的目标检测框和关键点检测而生成的xml文件, 转换为coco数据集格式.

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

20行代码教你用python给证件照换底色

20行代码教你用python给证件照换底色

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

Kotlin Programming Cookbook_Code 源码

Kotlin Programming Cookbook_Code 源码 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

跳槽入职字节跳动,给到20K16薪,只因比别人更懂多线程与高并发

前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉;现如今市场,多线程、高并发编程、分布式、负载均衡、集群等可以说是现在高级后端开发求职的必备技能。 早期的鸟儿有虫吃,现如今做开发的门槛越来越高 但是,术业有专攻,总有一些技术牛逼的程序员可以吊打、碾压面试官! 本人经常隔段时间就偷偷投点简历,请假出去面试几次,目的不是想跳槽,主要是为了看看市场上的技术流行趋势,顺便检验一下自己的水平,当然,如果面到了心仪的公司或者大

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

程序员的算法通关课:知己知彼(第一季)

【超实用课程内容】 程序员对于算法一直又爱又恨!特别是在求职面试时,算法类问题绝对是不可逃避的提问点!本门课程作为算法面试系列的第一季,会从“知己知彼”的角度,聊聊关于算法面试的那些事~ 【哪些人适合学习这门课程?】 求职中的开发者,对于面试算法阶段缺少经验 想了解实际工作中算法相关知识 在职程序员,算法基础薄弱,急需充电 【超人气讲师】 孙秀洋&nbsp;| 服务器端工程师 硕士毕业于哈工大计算机科学与技术专业,ACM亚洲区赛铜奖获得者,先后在腾讯和百度从事一线技术研发,对算法和后端技术有深刻见解。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27272 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程无限观看时长,但是大家可以抓紧时间学习后一起讨论哦~

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问