编码的能力提升方法:阅读 码代码 无限循环
2024.07.15
bug1:
#include <iostream>
#include <string.h>
class Person{
public:
char name[32];
int age;
Person(){
strcpy(name , '\0');//直接赋值会报错,不支持指定数组类型
age= 0;
}
Person(const char* n, int a){
strncpy(name,n,sizeof(name)-1);
name[sizeof(name)-1] = '\0';
age = a;
}
};
int main()
{
//2024.07.15
Person p1;
Person p2 = Person();
Person p3("Tom",25);
Person p4 = Person("Lion",18);
Person p5{"Jerry",30};//c++11 以后比较受欢迎
Person();
Person("Long",20);
return 0;
}
一开始是 name =" "; 结果报错,数组名不可以直接赋值字符串,需要使用strpy函数
bug2:Data ob;//报错,实现了拷贝构造,编译器不自动生成默认的构造函数。
cpp
#include <iostream>
#include <string.h>
using namespace std;
/*
* 析构*
* */
class Data{
public:
int a;
char* name;
public:
// Data(){
// a = 100;
// cout<<"无参构造函数"<<endl;
// }
Data(int p){
a = p;
cout<<"有参构造函数"<<a<<endl;
}
Data(int p,const char* str){
a = p;
name = new char[strlen(str)+1];
strcpy(name,str);
cout<<"有参构造函数"<<a<<", "<<name<<endl;
}
//拷贝构造
Data(const Data& ob){
a = ob.a;
}
~Data(){
cout<<"析构函数"<<a<<endl;
if(name!=NULL)
delete[] name;
}
};
int main()
{
Data ob;
Data ob01(200,"Lion");
cout<<ob01.name<<endl;
Data ob02 = ob01;
return 0;
}
所以;以后一般都确保你的类中将所有的构造函数都添加了,避免出现编译错误
记:实现了有参构造,编译器不自动生成默认的无参构造函数。
实现了有参构造或无参构造函数,不影响编译器自动生成默认的拷贝构造函数。