C++中如何通过使用cin输入给构造函数传值

C++中如何通过使用cin输入给构造函数传值,搞了好久都没有搞好,还请各位大神解答,在线等!

3个回答

临时变量存起来然后传呗,不行么

void function(str1, str2){
char s0 = str1, s1 = str2;
..........
}

int main(){
char str1[20],str2[20];
cin >> str1 >> str2;

cout << str1 << "-" << str2<<endl;
function (str1, str2);
return 0;
}

怎么可能给构造函数传,你给构造出来的对象传,或者构造时候自己写的缺省值就行

qq_35965090
C-Jonn 就是想通过用户输入给类的实例化对象,然后对象在调用构造函数进行初始化,,这一步始终有错误的,传不了。
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++构造函数传参数失败
#include<iostream> #include<iomanip> #include<string> using namespace std; class Person{ public: Person(string id="gdhs",string ="dsfsda" ,string ="" ,string ="",string ="" ) { void setIdPerson(string id); void setName(string na); void setSex(string se); void setBirthday(string bd); void setHomeAddress(string ad); } void Person::setIdPerson(string id) { IdPerson=id; } void setName(string na) { Name=na; } void setSex(string se) { Sex=se; } void setBirthday(string bd) { Birthday=bd; } void setHomeAddress(string ad) { HomeAddress=ad; } string getIdPerson() { return IdPerson; } string getBirthday() { return Birthday; } string getName() { return Name; } string getSex() { return Sex; } string getHomeAddress() { return HomeAddress; } /*void Person::input() { cout<<"输入人员信息:\n"; cout<<"姓名:";cin>>Name; cout<<"\n身份证号:";cin>>IdPerson; cout<<"\n性别:";cin>>Sex; cout<<"\n生日:";cin>>Birthday; cout<<"\n家庭住址:";cin>>HomeAddress; }*/ void Person::display() { cout<<"姓名:"<<getName()<<endl<<"身份证号:"<<getIdPerson()<<endl<<"性别:"<<getSex()<<endl<<"生日:"<<getBirthday()<<endl<<"家庭住址:"<<getHomeAddress()<<endl; } private: string IdPerson; string Name; string Sex; string Birthday; string HomeAddress; }; int main() { cout<<"**********人员信息录入***********"<<endl; Person p1("fdsfsd"); //p1.input(); p1.display(); system("pause"); return 0; } 为什么构造函数中的默认函数传不进去?
c++对象数组 构造函数
题目是一个打印工资单(payrate*hours),数组里有七个对象,需要每个对象的输入时间(hour)乘payRate,最后返回到payTotal里,可是不知道怎么把键盘输入的存入对象数组里,而且总是报错,而且后面函数里的变量好像也有点问题,没用到数组,不知道怎么改啊,急求解答!!!!!非常感谢!! 这是main函数的cpp ``` #include <iostream> #include <iomanip> #include "Payroll.h" using namespace std; int main() { const int NUM_EMP = 7; double value; int num; Payroll employee[NUM_EMP]; cout << "Enter the payRate for the employee: "; cin >> num; for(int i=0;i<NUM_EMP;i++) { cout << "Employee" << i+1 << " : " << "Enter the numbers of hours: "; cin >> employee[i]; } Payroll item(); cout << setprecision(2) << fixed; for(int k=0;k<NUM_EMP;k++) { cout << "The amount of gross pay for employee" << k+1 << ": " << employee[k].getTotalPay << endl; } return 0; } ``` 下面是Payroll.cpp ``` #include "Payroll.h" // Needed for the Rectangle class #include <iostream> // Needed for cout #include <cstdlib> // Needed for the exit function using namespace std; Payroll::Payroll() { hours = 0.0; payRate = 0.0; } void Payroll::setHours(double hou) { if(hou <= 60.00) hours = hou; else { cout << "Please Enter the valid numbers: "; exit(EXIT_FAILURE); } } void Payroll::setPayRate(double pay) { payRate = pay; } ``` 最后是payroll.h ``` #ifndef PAYROLL_H #define PAYROLL_H class Payroll { private: double hours; double payRate; public: Payroll(); void setHours(double); void setPayRate(double); double getHours() const { return hours; } double getPayRate() const { return payRate; } double getTotalPay() const { return hours * payRate; } }; #endif ```
c++函数构造出现问题?
这是一个将华氏温度转化为摄氏温度的函数,为什么输出华氏温度后,输出的摄氏温度值一直为0呢? ``` #include<iostream> #include<cstdlib> using namespace std; int ftoc(int f) { int c; c = (5 / 9 * (f - 32)); return c; } int main() { int fahr; int celi; cout << "please enter the fahr: "; cin >> fahr; celi = ftoc(fahr); cout << "the celi is: " << celi << endl; system("pause"); return 0; } ```
C++继承的构造函数问题
``` #include <bits/stdc++.h> using namespace std; class Time { public: int hour,minute,second; public: Time(int a,int b,int c):hour(a),minute(b),second(c) { cout<<"Time "<<hour<<":"<<minute<<":"<<second<<" is created."<<endl; } ~Time() { cout<<"Time "<<hour<<":"<<minute<<":"<<second<<" is erased."<<endl; } Time(Time &temp) { hour=temp.hour; minute=temp.minute; second=temp.second; } }; class Alarm:public Time { private: Time T; string str; public: Alarm(int a,int b,int c,string d):T(a,b,c),str(d) { cout<<"Alarm "<<str<<" is created."<<endl; } ~Alarm() { cout<<"Alarm "<<str<<" is erased."<<endl; } string getThing(){return str;} int remainSeconds(Time &t) { return (T.second+T.minute*60+T.hour*3600-(t.second+t.minute*60+t.hour*3600)); } }; int main() { int h, m, s; string th; cin>>th; cin>>h>>m>>s; Alarm alarm(h,m,s,th); cin>>h>>m>>s; Time now(h,m,s); cout<<"Alarm "<<alarm.getThing()<<" will start after "<<alarm.remainSeconds(now)<<" seconds."<<endl; return 0; } ``` 这一行 Alarm(int a,int b,int c,string d):T(a,b,c),str(d) 为什么显示 no matching function for call to 'Time::Time()'| 如果不继承就是对的,继承了就会显示这个错误,要怎么改呢。
C++初次使用虚函数出现报错不知如何处理
``` #include<iostream> using namespace std; class shape { public: virtual int area(); shape() { cout<<"调用shape构造函数"<<endl; } ~shape() { cout<<"调用shape析构函数"<<endl; } }; class rectangle: public shape { private: int x; int y; public: void in() { cout<<"请输入矩形长宽"<<endl; cin>>x>>y; } virtual int area(); rectangle() { cout<<"调用rectangle构造函数"<<endl; } ~rectangle() { cout<<"调用rectangle析构函数"<<endl; } }; class circle: public shape { private: float r; public: void in() { cout<<"请输入圆形的半径"<<endl; cin>>r; } virtual int area(); circle() { cout<<"调用circle构造函数"<<endl; } ~circle() { cout<<"调用circle析构函数"<<endl; } }; class square: public rectangle { private: int a; public: void in() { cout<<"请输入方形的边长"<<endl; cin>>a; } virtual int area(); square() { cout<<"调用square构造函数"<<endl; } ~square() { cout<<"调用square析构函数"<<endl; } }; int main(void) { circle c; rectangle r; square s; c.in(); r.in(); s.in(); cout<<"圆形面积"<<c.area()<<endl; cout<<"矩形面积"<<r.area()<<endl; cout<<"方形面积"<<s.area()<<endl; } int rectangle::area() { return x*y; } int circle::area() { return 3.14*r*r; } int square::area() { return a*a; } ``` 编译时报错信息为: C:\Users\Administrator\AppData\Local\Temp\ccLhjdDA.o In function `shape::shape()': 10 C:\Users\Administrator\Desktop\未命名2.cpp undefined reference to `vtable for shape' C:\Users\Administrator\AppData\Local\Temp\ccLhjdDA.o In function `shape::~shape()': 15 C:\Users\Administrator\Desktop\未命名2.cpp undefined reference to `vtable for shape' C:\Users\Administrator\Desktop\collect2.exe [Error] ld returned 1 exit status
C++定义类的对象的数组为什么不对(主函数刚开始的地方)还有主函数中调用构造函数也错了,为什么
``` #include <iostream> #include <fstream> using namespace std; class Student { public: Student(int num,char sex,int score) { this->num=num; this->sex=sex; this->score=score; } protected: int num; char sex; int score; }; int main() { Student stu[3];//此处错误 for(int i=0;i<3;i++) { int num; char sex; int score; cin>>num>>sex>>score; stu[i](num,sex,score);//此处错误 } ``` ``` ofstream outfile("stu.data",ios::binary); if(!outfile) { cerr<<"open error!"<<endl; // abort(); } for(int i=0;i<3;i++) { outfile.write((char*)&stu[i],sizeof(stu[i])); } outfile.close(); return 0; } ```
c++,二叉树调用构造函数停止工作问题
#include<iostream> #include<vector> using namespace std; template<class T> struct BiNode { T data; BiNode<T> *lchild; BiNode<T> *rchild; }; template<class T> class BiTree { private: BiNode<T> *root; BiNode<T>* CreateByPre(vector<T>&pre,int &i); void Free(BiNode<T>*p); void PreOrder(BiNode<T>*p); void InOrder(BiNode<T>*p); void PostOrder(BiNode<T>*p); int Count(BiNode<T>*p); int Height(BiNode<T>*p); BiNode<T> * Search(BiNode<T>*p,T e); BiNode<T> * SearchParent(BiNode<T>*p,BiNode<T>*child); public: BiTree(){root=NULL;} BiTree(vector<T>&pre); ~BiTree(); void PreOrder(); void InOrder(); void PostOrder(); void LevelOrder(); int Count(); int Height(); BiNode<T> *Search(T e); BiNode<T> *SearchParent(BiNode<T> *child); }; template<class T> BiNode<T>* BiTree<T>::CreateByPre(vector<T>&pre,int &i) { T e=pre[i];i++; if(e=='*') return NULL; BiNode<T> *p=new BiNode<T>; p->data=e; p->lchild=CreateByPre(pre,i); p->rchild=CreateByPre(pre,i); return p; } template<class T> BiTree<T>::BiTree(vector<T>&pre) { int i=0; root=CreateByPre(pre,i); } void main() { vector<char> vc; char x=0; while(cin>>x) { if(x=='#') break; vc.push_back(x); } BiTree<char> a(vc); } 一直到构造二叉树对象都没问题,一调用二叉树构造函数,VC就停止工作了,为什么?
以istream为参数的构造函数问题
初学C++看到书本上说可以istream为构造函数,可是代码打上去有不是那么回事了。 这是我在书上打的一个关于整理书店书籍销售的类: ``` struct Sales_data { string bookNo;//书名 unsigned unit_sold;//销售总数 double revenue;//总价 //构造函数 Sales_data(iostream& is) { read(is,*this);//read函数的作用是从is中读取一条交易信息 //然后存入this对象中 } string isbn()const//返回书名号 { return bookNo; } Sales_data& combine(const Sales_data&);//将相同书名号的类对象的销售总额相加 double average()const;//计算这本书的平均售价 }; //read的定义 istream &read(istream &is,Sales_data &item) { double price=0; is>>item.bookNo>>item.unit_sold>>price;//分别输入书名号,书的销售总数和单价 item.revenue=price*item.unit_sold; return is; } 然后我在main 函数里面创建一个对象的时候是这样创建的 Sales_data book(cin); 然后编译器就说我没有相应的构造函数,哎呀╮(╯▽╰)╭就是书上没说当构造函数以istream为参数的时候怎么创建对象,明明写了构造函数,可是编译器老说没有对应的构造函数。请各位前辈有空帮帮忙,万分感谢
各位大神,小弟有的一个C++的问题,是关于类函数的使用和该类的全局变量使用冲突的问题
C++代码如下,求各位大神支招,其实应该很简单,还是我忘了一些语法~~代码什么的都不重要,就开头那里的几句关于提前声明类和定义该类的全局变量冲突了~~ #include<iostream> #include<string> #include<array> #include<vector> #include<stdio.h> #include<cstring> using namespace std; bool flag = true; char G_name[20] = ""; class Student; Student *head = new Student(G_name,0,0); class Student { public: Student(char *name, int number, int age) { int i = 0; for (i = 0;i < sizeof(name);i++) { this->m_name[i] = name[i]; } this->m_number = number; this->m_age = age; } ~Student() { cout << "删除该学生信息完毕" << endl; } void AddHead(Student *std) { cout << "请输入你想要插入的学生的姓名" << endl; cin >> std->m_name; cout << "请输入你想要插入的学生的学号" << endl; cin >> std->m_number; cout << "请输入你想要插入的学生的年龄" << endl; cin >> std->m_age; std->p = head; head->p = NULL; head = std; std = NULL; } void AddTail(Student *std) { cout << "请输入你想要插入的学生的姓名" << endl; cin >> std->m_name; cout << "请输入你要插入的学生的学号" << endl; cin >> std->m_number; cout << "请输入你要插入的学生的年龄" << endl; cin >> std->m_age; Student *ff = NULL; ff = head; while (ff->p != NULL) { ff = ff->p; } ff->p = std; std->p = NULL; } void Print() { Student *ff = NULL; ff = head; cout << "学生年龄" << " " << "学生姓名" << " " << "学生学号" << endl; while (ff->p != NULL) { cout << ff->m_age; cout << " "; cout << ff->m_name; cout << " "; cout << ff->m_number << endl; } cout << ff->m_age; cout << " "; cout << ff->m_name; cout << " "; cout << ff->m_number << endl; } void Delete() { Student *ff = NULL; Student *fx = NULL; ff = head; int number = 0; cout << "请输入你要删除的学生的学号" << endl; cin >> number; while (ff->m_number != number) { ff = ff->p; } fx = ff; ff = ff->p; free(fx); fx = NULL; } void Modify() { Student *ff = NULL; Student *fx = NULL; ff = head; int number = 0; cout << "请输入你要修改的学生的学号" << endl; cin >> number; while (ff->m_number != number) { ff = ff->p; } cout << "请输入修改后的学生姓名" << endl; cin >> ff->m_name; cout << "请输入修改后的学生学号" << endl; cin >> ff->m_number; cout << "请输入修改后的学生年龄" << endl; cin >> ff->m_age; } void Exit() { cout << "您好,您已经退出" << endl; } private: char m_name[20]; int m_number; int m_age; Student *p = NULL; }; void print() { cout << "请输入您想要执行的命令的选项" << endl; cout << "1.我想前插入一个学生信息" << endl; cout << "2.我想后插入一个学生的信息" << endl; cout << "3.我想打印所有当前学生的信息" << endl; cout << "4.我想删除某位学生的信息" << endl; cout << "5.我想修改某位学生的信息" << endl; cout << "6.我什么也不想做,直接退出" << endl; } void Execute() { int a = 0; cin >> a; char name[20] = ""; int number = 0; int age = 0; Student *stud = new Student(name, number, age); switch (a) { case 1: head->AddHead(stud); break; case 2: head->AddTail(stud); break; case 3: head->Print(); break; case 4: head->Delete(); break; case 5: head->Modify(); break; case 6: flag = false; break; default: break; } } int main(void) { while (flag) { print(); Execute(); } system("pause"); return 0; } 最后编译器就给我一句话:“Student”:类没有构造函数。该如何解决啊~~大神们
c++中析构函数出现问题
#pragma once #include<iostream> using namespace std; struct term { double coef;//{数} coefficient 系数 int expn;//exponent 指数 }; struct PNode { term data; PNode *next; }; class Polyn //polynomial 多项式 { public: Polyn() { cout << "构造函数调用"<<endl; phead = new PNode; phead->next = NULL; } ~Polyn() { cout << "析构函数调用"<<endl; clear(); delete phead; }//野指针????存在-出错 void clear(); //清空 void creatp();//建立链表 Polyn PolyAdd(Polyn pb);//多项式求和 void print();//输出 private: PNode *phead; }; void Polyn::clear() { PNode *p, *q; p = phead->next; while (p) { q = p->next; delete p; p = q; } phead->next = NULL; } void Polyn::creatp() { int n; int i = 0; cout << "请输入多项式项数:"; cin >> n; PNode *p, *q; q = phead; for (i = 0; i < n; i++) { p = new PNode; //cout << "输入系数:" << endl; cin >> p->data.coef; //cout << "输入指数:"<<endl; cin >> p->data.expn; p->next = NULL; q->next = p; q = p; } } Polyn Polyn::PolyAdd(Polyn pb) { Polyn pc; PNode *p1, *p2, *p3; p1 = phead; p2 = pb.phead; p3 = pc.phead; PNode *t1, *t2, *t3; t1 = p1->next; t2 = p2->next; t3 = p3; while (t1&&t2) { if (t1->data.expn < t2->data.expn) { t3->next = new PNode; t3 = t3->next; t3->data = t1->data; t1 = t1->next; } else if (t1->data.expn > t2->data.expn) { t3->next = new PNode; t3 = t3->next; t3->data = t2->data; t2 = t2->next; } else { double a = t1->data.coef + t2->data.coef; if (a != 0.0) { t3->next = new PNode; t3 = t3->next; t3->data.coef = a; t3->data.expn = t1->data.expn; } t1 = t1->next; t2 = t2->next; } } while (t1 != NULL) { t3->next = new PNode; t3 = t3->next; t3->data = t1->data; t1 = t1->next; } while (t2 != NULL) { t3->next = new PNode; t3 = t3->next; t3->data = t2->data; t2 = t2->next; } t3->next = NULL; return pc; } void Polyn::print() { PNode *p; p = phead->next; if (phead->next == NULL) cout << "empty!!" << endl; else while (p) { cout << p->data.coef << " " << p->data.expn << " "; p = p->next; } cout << endl; } main.cpp #include<iostream> #include"polynomial.h" using namespace std; int main() { Polyn s,s2; cout << "输入多项式1:" << endl; s.creatp(); cout << "输入多项式2:" << endl; s2.creatp(); s2.print(); cout << "相加为:" << endl; s.PolyAdd(s2).print(); //s3.print(); /*s3.clear();//error 出错,完全相同可运行 s2.clear(); s.clear(); /*s.creatp(); s.print();*/ } //realloc 以上是代码运行到相加时会停止,求大神解答
C++代码运行中出现无法解析的外部命令?
代码的作用是定义一个点类Point,派生出圆类和圆柱体类Circle和Cylinder 功能是输出圆的周长(通过定义的Cirfer()函数)、面积(定义有Area()函数)和圆柱体的表面积和体积 ![图片说明](https://img-ask.csdn.net/upload/201910/13/1570977934_645492.jpg) ``` //Shape.h #ifndef SHAPE_H #define SHAPE_H #include<iostream> #define PI 3.1415926 using namespace std; class Point { public: Point(double X, double Y); //构造函数 void Set(double X, double Y); //设置点值 double Getx()const; //获取横坐标 double Gety()const; //获取纵坐标 virtual void Output(ostream &out) const; //输出函数 virtual void Input(istream &in); //输入函数 protected: double x, y; }; class Circle :public Point { public: Circle(const Point &p, double R); void Set(double X, double Y, double R); void Set(const Point &p, double R); double Getr()const; double Area(); //计算圆的面积 double Cirfer(); //计算圆的周长 void Output(ostream &out)const; void Input(istream &in); protected: double r; }; class Cylinder :public Circle { public: Cylinder(const Circle& c, double H); void Set(const Circle& c, double H); double Geth()const; double Area(); //计算圆柱体的表面积 double Volume(); //计算圆柱体体积 void Output(ostream& out)const; void Input(istream& in); protected: double h; }; ostream& operator<<(ostream& out, const Point& p); //输出运算符重载 istream& operator>>(istream& in, const Point& p); //输入运算符重载 #endif //Shape.cpp #include<iostream> #include"Shape.h" using namespace std; ostream & operator<<(ostream &out, const Point &p) //输出运算符重载 { p.Output(out); return out; } istream & operator>>(istream &in, Point &p) //输入运算符重载 { p.Input(in); return in; } //Point类成员函数 Point::Point(double X, double Y) :x(X), y(Y) {} void Point::Set(double X, double Y) { x = X, y = Y; } double Point::Getx()const { return x; } double Point::Gety()const { return y; } void Point::Output(ostream &out)const { out << '(' << x << "," << y << ')'; } void Point::Input(istream& in) { char str[80]; in.getline(str, 80, '('); in.getline(str, 80, ','); x = atof(str); //atof()是字符从ASCII转为float型数据 in.getline(str, 80, ')'); y = atof(str); } //Circle类成员函数 Circle::Circle(const Point& p, double R) : Point(p), r(R) {} void Circle::Set(double X, double Y, double R) { x = X, y = Y, r = R; } void Circle::Set(const Point& p, double R) { Point::Set(p.Getx(), p.Gety()); r = R; } double Circle::Getr()const { return r; } double Circle::Area() //圆面积 { return PI * r * r; } double Circle::Cirfer() //圆周长 { return 2 * PI * r; } void Circle::Output(ostream& out)const { out << '[' << '(' << x << "," << y << ')' << "," << r << ']'; } void Circle::Input(istream& in) { char str[80]; in.getline(str, 80, '['); Point::Input(in); in.getline(str, 80, ','); in.getline(str, 80, ']'); r = atof(str); } //Cylinder类成员函数 Cylinder::Cylinder(const Circle& c, double H) :Circle(c), h(H) {} void Cylinder::Set(const Circle& c, double H) { Circle::Set(Getx(),Gety(),Getr()); h = H; } double Cylinder::Geth()const { return h; } double Cylinder::Area() //圆柱体表面积 { return PI*r*r* 2+2*PI*r*h; } double Cylinder::Volume() //圆柱体体积 { return PI*r*r* h; } void Cylinder::Output(ostream& out)const { out << '{'; Circle::Output(out); out << "," << h << '}'; } void Cylinder::Input(istream& in) { char str[80]; in.getline(str, 80, '{'); Circle::Input(in); in.getline(str, 80, ','); in.getline(str, 80, '}'); h = atof(str); } //test.cpp #include<iostream> #include"Shape.h" int main() { Point p(5, 8); //初始化各个类的数据成员 Circle c(p, 10); Cylinder y(c, 8); cout << c << "\tArea:" << c.Area() << "\t\tCircumference" << c.Cirfer() << '\n' << y << "\tArea:" << y.Area() << "\tVolume:" << y.Volume() << endl; cout << "\n请注意键盘输入格式。"; cout << "\n包括圆括号、方括号、花括号、逗号,"; cout << "其中可以插入或不插入空格、<Tab>、换行。" << endl; cout << "请输入一个点 (x, y) : "; cin >> p; cout << "结果:" << p << endl; cout << "请输入一个圆 [(x, y), r] : "; cin >> c; cout << "结果:" << c << endl; cout << "请输入一个圆柱 {[(x, y), r], h} : "; cin >> y; cout << "结果:" << y << endl; return 0; } ```
C++程序运行时不能读取内存
``` #include<iostream> using namespace std; //**********结点类********** template<class ElemType> struct BinTreeNode { ElemType data; BinTreeNode <ElemType> * leftchild = NULL; BinTreeNode <ElemType> * rightchild = NULL; BinTreeNode(); BinTreeNode(const ElemType &d, BinTreeNode<ElemType>* lchild = NULL, BinTreeNode<ElemType>* rchild = NULL); }; template<class ElemType> BinTreeNode<ElemType>::BinTreeNode() //无参构造函数 { leftchild = rightchild = NULL; } template<class ElemType> BinTreeNode<ElemType>::BinTreeNode(const ElemType &d, BinTreeNode<ElemType>* lchild, BinTreeNode<ElemType>* rchild) //有参构造函数 { data = d; leftchild = lchild; rightchild = rchild; } //**********二叉排序树类********** template<class ElemType> class BinarySortTree { protected: //数据成员: BinTreeNode<ElemType> *root; public: //函数成员: BinarySortTree(); //无参数构造函数 virtual ~BinarySortTree(); //析构函数 BinTreeNode<ElemType> *GetRoot() const; //求二叉排序树的根 BinTreeNode<ElemType> *Find(ElemType &key, BinTreeNode<ElemType> *&f); //查找关键字为key的数据元素 void Insert(ElemType e, BinTreeNode<ElemType> *head); //插入数据元素e void Delete(BinTreeNode<ElemType> *&p); //删除结点 void InOrder(BinTreeNode<ElemType> *r); //中序遍历 }; //无参构造函数 template<class ElemType> BinarySortTree<ElemType>::BinarySortTree() { root = NULL; } //析构函数 template<class ElemType> BinarySortTree<ElemType>::~BinarySortTree() { } //求二叉排序树的根 template<class ElemType> BinTreeNode<ElemType> * BinarySortTree<ElemType>::GetRoot() const { return root; } //查找关键字为key的数据元素 template<class ElemType> BinTreeNode<ElemType> * BinarySortTree<ElemType>::Find(ElemType &key, BinTreeNode<ElemType> *&f) { BinTreeNode<ElemType> *p = GetRoot(); //指向当前结点 f = NULL; //指向p的双亲 while (p != NULL && p->data != key){ if (key < p->data){//key比p小,左子树 f = p; p = p->leftchild; } else{//key比p大,右子树 f = p; p = p->rightchild; } } return p; } //二叉排序树插入 template<class ElemType> void BinarySortTree<ElemType>::Insert(ElemType e, BinTreeNode<ElemType> *head) { if (head == NULL){ head = new BinTreeNode<int>(e); cout << "head == NULL" << endl; } else{ if (e > head->data){ Insert(e, head->rightchild); cout <<"head != NULL"<< endl; } else{ Insert(e, head->leftchild); cout <<"head != NULL"<< endl; } } } //删除结点 template<class ElemType> void BinarySortTree<ElemType>::Delete(BinTreeNode<ElemType> *&p) { BinTreeNode<ElemType> *tmpPtr, *tmpF; if (p->leftchild == NULL && p->rightchild == NULL){ delete p; p = NULL; } else if (p->leftchild == NULL){ tempPtr = p; p = p->rightchild; delete tmpPtr; } else if (p->rightchild == NULL){ tmpPtr = p; p = p->leftchild; delete tmpPtr; } else { tmpF = p; tmpPtr = p->leftchild; while (tmpPtr->rightchild != NULL){ tmpF = tmpPtr; tmpPtr = tmpPtr->rightchild; } p->data = tmpPtr->rightchild; if (tmpF->rightchild == tmpPtr) Delete(tmpF->rightchild); else Delete(tmpF->leftchild); } } //中序遍历 template<class ElemType> void BinarySortTree<ElemType>::InOrder(BinTreeNode<ElemType> *r) { if (r != NULL) { cout << r->data; InOrder(r->leftchild); cout << r->data; InOrder(r->rightchild); } } int main() { int n[30]; int m; BinarySortTree<int> A; BinTreeNode<int> *head=NULL; cout << "输入要插入的数据个数: " << endl; cin >> m; for (int i = 0; i <= m-1; i++) { cout << "输入要插入的数据: " << endl; cin >> n[i]; A.Insert(n[i], head); } A.InOrder(head); system("pause"); } ``` 只要是BinTreeNode定义的变量,在访问它的data或左右孩子的时候,都会显示无法读取内存,然后出错。而且主函数定义的head指针永远都是空的,不知道为什么,跪求大佬的解读。
用函数的返回值初始化一个类对象,这其中用了几次复制构造函数
这是我自己写的一段代码 #include<iostream> using namespace std; class Example { int num; public: Example(int i) { num=i; cout<<"This is construction with parameter.\n"; } Example() { num=0; cout<<"This is construction without parameter.\n"; } Example(Example& ex) { cout<<"This is Copy construction.\n"; } ~Example() { cout<<"This is deconstruction.\n"; } Example& operator =(Example& ex) { cout<<"This is assignment function.\n"; this->num=ex.num; return *this; } }; Example fun(Example b) { cout<<"fun().\n"; return b; } int main() { Example b(10); //(1) Example a=fun(b);//(2) cin.get(); } 该函数的输出为(亲测): This is construction without parameter. This is Copy construction. fun(). This is Copy construction. 书上说的也都是这样,但是我有个问题: main中第二步执行时首先调用复制构造函数对应传入的对象b生成一个临时对象(temp),return时再次调用复制构造函数生成一个临时对象用于返回,然后temp析构,按书上说的此刻程序就走完了,但是在main中这一步Example a=fun(b)不应该再用return的那个临时对象来初始化a吗?应该再调用一次复制构造函数才对啊?此处一直想不通,请高手来解答。
构造函数能够从键盘初始化么?
#include <iostream> using namespace std; class shape //虚基类 {public: double x; double y; shape() {double a,b; cin>>a>>b; x=a; y=b;} //构造函数 virtual void area()=0; virtual void print()=0; }; class triangle:public shape //三角形 { double a; public: void area() //三角形面积 { a=0.5*x*y; } void print() //三角形输出函数 { cout<<"TriangleArea="<<a<<endl; } }; class rectangle:public shape //矩形 { double a; public:void area() { a=x*y; } void print() { cout<<"RectangleArea="<<a<<endl; } }; class circle:public shape //圆 { double a; public: void area() { a=3.14*x*x; } void print() { cout<<"CiroleArea="<<a<<endl; } }; int main() { shape *p; triangle a; rectangle b; circle c; p=&a; p->area(); p->print(); p=&b; p->area();p->print(); p=&c; p->area();p->print(); return 0; } 利用C++的多态性,设计一快递运费计算软件。 货物由北京可通过快递公司运往天津、上海、太原、广州、昆明、新疆六个城市,分别用1、2、3、4、5、6作为它们编号。运送货物的重量分为1、2、3公斤。快递公司有四家:E通宝、顺风、EMS和圆通,编号为1、2、3、4。不同城市、不同重量、不同的快递公司所费用由表1给出。当输入快递公司编号、城市编号和货物重量时,屏幕输出货物运送快递公司名称、到达的城市及费用。编程要求如下: 1.定义一基类为快递公司,类中定义“城市编号”、货物个数、重量等成员,成员函数有基本成员输出函数及两个纯虚函数:求运输费用函数和输出信息函数。 2.分别定义各快递公司的派生类,在类中参照表中提供的数据,根据自己的实际,编写各自的运输费用函数和输出信息函数。 3.用实例测试。在主函数中定义一基类的指针数组,使这些指针分别指向不同的快递公司。 问题如上,不知道为啥运行出来输入x和y之后无反应,是不是构造函数初始化的方法不对??
C++中Worker类问题,继承与派生
老师布置的作业,加上拓展1的代码之后就运行不了了,求大佬帮忙解答一下~谢谢! 试建立一个类Worker用于描述职工,具体要求如下: (1)私有数据成员 unsigned int id: 职工号。 char name[11]:姓名 float salary: 工资。(有一符号常量为工资最低值,设为2000) int level: 技术等级(1~20级),1级为最低,每个等级差别200元 (2)公有成员函数 Worker ( ):构造函数,初始化数据成员为默认值(自动生成职工号,姓名为空,工资默认最低)。 Worker (…):构造函数(自己定义参数),用参数初始化数据成员。参数有各个数据成员。 void setName(...): 设置职工姓名 void infoList( ): 输出职工的各项信息。 void setLevel(...): 修改技术等级level的值。每增加一个等级工资增加200元。 (3)static变量total计算工资总数和函数Average()计算平均工资。 (4)设置友元函数void setReward(Worker &a,float reward),给工人a发奖金。 (5)在主程序中定义N(=5)个Worker对象作为测试数据,完成对Worker类和程序的测试。 (6)在主程序中对其中某个工人发放奖金500元。 扩展1:在类Worker的基础上派生两个类:PieceWorker和HourWorker 在PieceWorker中添加变量piece(整数),假设每个piece的报酬20元,并根据piece计算salary. 在HourWorker中添加变量hour(浮点数),假设每个hour的报酬50元,并根据hour计算salary. 在main()中分别声明不同的对象,假设有一群工人(Worker),N=5,计算他们salary总和。 扩展2:设置GetSalary()函数,将Worker类中GetSalary()设成纯虚函数,并由派生类继承。 按要求完成main()函数的设计,其运行过程如下。 (1) 首先建立N个元素(N=5)的对象指针数组WorkerArray[]; (2) 输入每个Worker的姓名;然后询问是PieceWorker还是HourWorker。 (3) 用多态性计算所有Worker的Salary之和(调用GetSalary()函数)。 #include<iostream> #define baseSalary 2000 using namespace std; class Worker { public: Worker(); Worker(char s[11],int l); ~Worker(); void setName(char name[11]); void infoList(); void setLevel(int l); void sum(); static float Aver(); friend void setReward(Worker *pWorker, float reward); protected: char name[11]; float salary; int level; static unsigned int i; static float total; private: unsigned int id; }; class PieceWorker:public Worker { public: PieceWorker() { } void Getsalary(); ~PieceWorker() { } private: int piece; }; class HourWorker:public Worker { public: HourWorker() { } void Getsalary(); ~HourWorker() { } private: float hour; }; #include<iostream> #include<string.h> #include"worker.h" using namespace std; unsigned int Worker::i = 0; float Worker::total = 0; Worker::Worker() { strcpy(name," "); } Worker::Worker(char s[11],int l) { i++; id = i; strcpy(name,s); salary = baseSalary + level*200; level = l; } Worker::~Worker() { } void Worker::setName(char s[11]) { strcpy(name,s); } void Worker::setLevel(int l) { level=l; salary = baseSalary+(200*level); } void Worker::sum() { total += salary; } float Worker::Aver() { return total/i; } void Worker::infoList() { cout<<"工号:"<<id<<'\t'<<"姓名:"<<name<<'\t'<<"技术等级:"<<level<<'\t'<<"工资:"<<salary<<endl; } void PieceWorker::Getsalary() { Worker::salary = 20*piece + Worker::salary; Worker::infoList(); } void HourWorker::Getsalary() { Worker::salary = 50*hour + Worker::salary; Worker::infoList(); } #include"worker.h" #define N 5 using namespace std; void main() { Worker *worker[N]; for(int i(0);i<N;i++) { char name[11]; int level; worker[i] = new Worker;////////////////// cout<<"请输入第"<<i+1<<"位职工的姓名:"<<endl; cin>>name; worker[i]->setName(name); cout<<"请输入第"<<i+1<<"位职工的技术等级:"<<endl; cin>>level; worker[i] = new Worker(name,level);/////////////////// worker[i]->setLevel(level); } PieceWorker *piceworker[N]; for(int i(0);i<N;i++) { int piece; cout<<"输入第"<<i+1<<"位职工的块数:"<<endl; cin>>piece; piceworker[i]->Getsalary(); worker[i]->infoList(); } cout<<"average="<<Worker::Aver()<<endl; HourWorker *hourworker[N]; for(int i(0);i<N;i++) { int hour; cout<<"输入第"<<i+1<<"位职工的工作时间:"<<endl; cin>>hour; hourworker[i]->Getsalary(); worker[i]->infoList(); } cout<<"average="<<Worker::Aver()<<endl; cout<<"给员工发放奖金,请选择第i个员工(0~"<<N-1<<"):"; int index; cin>>index; setReward(worker[index],500); for(int i = 0;i<N;i++) { worker[i]->infoList(); } for( int i = 0;i<N;i++) { if ( worker[i] != NULL ) delete worker[i]; } } void setReward(Worker * pWorker,float reward) { pWorker->salary += reward; }
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; } 一运行 输入姓名之后就报错~我看半天了 都觉得挺对啊 求大神指点
求解C++析构函数释放内存错误原因,头疼。
拜托看一下我这个矩阵类实现里的析构函数哪里错了,编译没问题,运行出错。 删掉析构函数就可以运行了,为什么呢? * #include<iostream> * using namespace std; * class CMatrix * { * public: * CMatrix(int, int); //构造函数 * void output(); //输出矩阵各元素 * CMatrix operator +(CMatrix &M2); //重载矩阵加运算 * CMatrix operator -(CMatrix &M2); //重载矩阵减运算 * friend istream & operator>>(istream &, CMatrix &); * friend ostream & operator<<(ostream &, CMatrix &); * ~CMatrix() * { * delete[] m_pData; * } * private: * int m_row; //矩阵行数 * int m_col; //矩阵列数 * double *m_pData; //使用指针指向矩阵各元素 * }; * //构造函数 * CMatrix::CMatrix(int r, int c) * { * m_row = r; * m_col = c; * m_pData = new double[r*c]; * for (int i = 0; i<m_row*m_col; i++) * m_pData[i] = 0; * } * //矩阵输出函数 * void CMatrix::output() * { * int j = 0; * for (int i = 0; i<m_row*m_col; i++) * { * cout << m_pData[i] << " "; * if ((i + 1) % m_col == 0) * cout << endl; * } * } * //重载矩阵相加运算 * CMatrix CMatrix::operator +(CMatrix &M2) * { * CMatrix M(m_row,m_col); * for (int i = 0; i<m_row*m_col; i++) * M.m_pData[i] = m_pData[i] + M2.m_pData[i]; * return M; * } * //重载矩阵相减运算 * CMatrix CMatrix::operator -(CMatrix &M2) * { * CMatrix M(this->m_row,this->m_col); * for (int i = 0; i<m_row*m_col; i++) * M.m_pData[i] = m_pData[i] - M2.m_pData[i]; * return M; * } * istream & operator>>(istream &input, CMatrix &c) * { * for (int i = 0; i < c.m_row*c.m_col; i++) * input >> c.m_pData[i]; * return input; * } * ostream & operator<<(ostream &output, CMatrix &c) * { * for (int i = 0; i < c.m_row*c.m_col; i++) * { * output << c.m_pData[i]; * if ((i + 1) % c.m_col == 0) * output << endl; * } * return output; * } * int main() * { * CMatrix M1(2, 2), M2(2, 2), M3(2, 2); * cin >> M1; * cout << M1; * cin >> M2; * cout << M2; * M3 = M1 + M2; * cout << M3; * M3 = M1 - M2; * cout << M3; * return 0; * }
C++类模版数组编译时显示不存在相应构造函数,可我有啊
![图片说明](https://img-ask.csdn.net/upload/201506/02/1433207702_969333.jpg) ``` #include <iostream> using namespace std; template <class T> class Carray{ public: Carry(int i = 2);//i是数组长度 bool show_array(); T *set_array(int i, int num); T *enlarge(int oi,int want)//oi为原数组长度,want为需求量 private: T *p;//任何类型数组的指针 int len;//数组长度 }; template<class T> Carray<T>::Carry(int i){ p = new T[i](); len = i; } template<class T> T *Carray<T>::set_array(int len,int num){ /*num为要输入的数量*/ cout<<"请输入一系列相同数据类型的数"<<endl; int j=0 for(;j < len;j++){ cin>>p[j]; } if(j < num-1){ p = enlarge(len,num); for(;j < num;j++) cin>>p[j]; } return p; } template<class T> Carray<T>::enlarge(int oi,int want){ T *np = new T[want](); for(int j = 0;j < oi;j++){ np[j] = p[j]; } len = want; return np; } template<class T> bool Carray<T>::show_array(){ for(int j = 0;j < len;j++) cout<<p[j]<<"\t"; cout<<endl; return 1; } int main(){ Carray<int> a1(); Carray<char>a2(5) return 1; } ```
c++链表大整数求和,我的结果是无限循环,知道是Add函数错了,但是不知道怎么改
能不能不改变我的Add函数的参数个数和类型把它改正确,求助各位大神了 #ifndef HEAD_H_INCLUDED #define HEAD_H_INCLUDED class Node { public: int data;//存储数据 Node *next; }; class LinkList { private: int length;//链表长度 public: Node *first; LinkList(); LinkList(int a[],int n);//有参构造函数 ~LinkList(); void Reserve(Node* first);//逆置链表 void PrintList();//打印链表 void PrintList(Node* first);//打印链表 friend LinkList Add(LinkList A,LinkList B);//链表A,B相加,并返回一个链表 }; #endif // HEAD_H_INCLUDED #include "Head.h" #include <iostream> using namespace std; LinkList::LinkList()//无参构造函数的实现 { first=new Node; first->next=NULL; } LinkList::LinkList(int a[],int n)//有参构造函数的实现 { first=new Node; first->next=NULL; for(int i=0; i<n; i++)//头插法创建链表 { Node *s=new Node; s->data=a[i]; s->next=first->next; first->next=s; } length=n; } LinkList::~LinkList()//析构函数的实现 { while(first!=NULL) { Node* q=first; first=first->next; delete q; } } void LinkList::Reserve(Node* first)//逆置函数的实现 { Node* p=first->next; first->next=NULL; while(p!=NULL) { Node* u=p->next; p->next=first->next; first->next=p; p=u; } } void LinkList::PrintList(Node* first)//打印函数的实现 { Node* p=first->next; while(p!=NULL) { cout<<p->data; p=p->next; } } void LinkList::PrintList()//打印函数的实现 { Node* p=first->next; while(p!=NULL) { cout<<p->data; p=p->next; } } LinkList Add(LinkList A,LinkList B)//A、B链表相加 { int flag=0; int i=0; int n=A.length; int m=B.length; Node* a=A.first->next; Node* b=B.first->next; LinkList C; while(i<n&&i<m) { Node* s=new Node;//创建一个节点来依次储存链表A、B各位相加的数值 s->data=(a->data+b->data+flag)%10; flag=(a->data+b->data+flag)/10; s->next=C.first->next;//利用头插法来创建C链表 C.first->next=s; a=a->next; b=b->next; i++; } for(;i<n;i++) { Node* s=new Node; s->data=(a->data+flag)%10; flag=(a->data+flag)/10; s->next=C.first->next; C.first->next=s; a=a->next; } for(;i<m;i++) { Node* s=new Node; s->data=(b->data+flag)%10; flag=(b->data+flag)/10; s->next=C.first->next; C.first->next=s; b=b->next; } if(flag)//最后若flag为1时进位 { Node* s=new Node; s->data=1; s->next=C.first->next; C.first->next=s; } C.first->next=NULL; return C; } #include "Head.h" #define MaxSize 100 #include <iostream> using namespace std; int main() { string i,j; int a[MaxSize],b[MaxSize]; c:cout<<"请输入第一个大整数(<=100位):"<<endl; cin>>i; int lena=i.size(); if(lena>MaxSize)//判断输入第一位大整数的位数是否大于100位,若大于100位,则回到c处重新输入第一位大整数 { cout<<"输入数值过大,请输入100位以内数值!"<<endl; goto c; } d:cout<<"请输入第二个大整数(<=100位):"<<endl; cin>>j; int lenb=j.size(); if(lenb>MaxSize)//判断输入第二位大整数的位数是否大于100位,若大于100位,则回到d处重新输入第二位大整数 { cout<<"输入数值过大,请输入100位以内数值!"<<endl; goto d; }cout<<endl; for(int m=0;m<lena;m++)//将字符串转换为整数 a[m]=i[m]-48; for(int n=0;n<lenb;n++) b[n]=j[n]-48; LinkList A(a,lena);//构造A链表 LinkList B(b,lenb);//构造B链表 LinkList C; C=Add(A,B); A.Reserve(A.first);//A链表逆置 A.PrintList(A.first);//打印链表A cout<<endl; B.Reserve(B.first);//B链表逆置 B.PrintList(B.first);//打印链表B cout<<endl; C.Reserve(C.first); C.PrintList(); return 0; }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问