g++ test.cpp默认生成的可执行文件为a.out
参数-o可以指定输入文件
又叫做复制构造函数
如果不写的话解释器默认会实现这个函数
class Test{
double val;
Test(const Test& t){
val = t.val;
}
}
当test的对象作为形参传递的时候和对象作为函数返回值得时候,就会调用复制构造函数。
const的作用是,在函数内,不允许对t.val的值进行更改,否则会报错
友元函数不属于类的成员函数
友元函数可以访问类的protect和private属性
class MyFriend
{
public:
int pubattr;
friend void printattr(MyFriend f);
void setattr(int attr, int age, string name);
protected:
int age;
private:
string name;
};
void MyFriend::setattr(int att, int a, string nam)
{
age = a;
pubattr = att;
name = nam;
}
void printattr(MyFriend f)
{
cout << "name is" << f.name << endl;
}
int main()
{
MyFriend myfriend1;
myfriend1.setattr(1, 18, "小明");
printattr(myfriend1);
return 0;
}
代码输出小明,
1.问题待研究:setattr定义哪里,形参命名age,和类属性age命名一样会发生什么
答:age会被认为是形参,也就是会被认为给形参的值赋值为形参,不影响类成员变量。
类成员变量好像会被初始化为一个默认值,str是空;int类型分情况(看访问修饰符),有时候是随机数,有时候是固定的(这个不确定,有时间研究下)测试代码如下:
void MyFriend::setattr2(int pubattr, int age, string name)
{
age = age; //改成this->age=age即可实现改变成员变量效果
pubattr = pubattr;
name = name;
}
void printattr(MyFriend f)
{
cout << "name is" << f.name << endl;
cout << "age is" << f.age << endl;
cout << "attr is" << f.pubattr << endl;
}
int main()
{
MyFriend myfriend1;
// myfriend1.setattr2(1, 18, "小明二代"); //这里注释和不注释的效果是一致的
printattr(myfriend1);
return 0;
}
- 待解决问题:类成员变量初始值是?
char数组和string该怎么用,那种情况下用string好,那种情况用char数组好



