栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++学习

g++

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;
}
  1. 待解决问题:类成员变量初始值是?
    char数组和string该怎么用,那种情况下用string好,那种情况用char数组好
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号