C++学习笔记

本文介绍了C++中的运算符重载,特别是输出运算符可作为友元函数而非成员函数使用。讨论了类的封装性、static成员函数和friend函数的特性,并详细阐述了构造函数、析构函数、拷贝构造函数以及赋值函数的作用。此外,还探讨了类的静态成员、对象初始化与赋值的区别,以及const在方法和变量引用中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 输出运算符能否重载为类成员函数?       理解:输出运算符可重载为类的友元函数,在语法上可以重载为类的普通成员函数,但在输出类对象时,这不符合人的正常思维!
  2. 在class类中,private通常存放类的数据成员,而类成员函数通常存放在public中,并且通过public中成员函数方法来对私有数据成员进行初始化等操作,在类外不通过类对象来直接访问类私有数据,而是通过类对象调用类成员函数,对私有数据进行访问,这体现封装性。
  3. 类中static member function 和friend function的简单特性?类中一个常规成员函数声明描述三件在逻辑上互不相同的事情:① 该函数能访问类的私有部分;② 该函数位于类的作用域中;③ 该函数必须经由一个对象激活(有一个this指针)。--->而通过将函数声明为static,可以让它只有前两种性质;--->通过将函数声明为friend(友元)可以使它只具有第一种性质。
  4. class类数据成员在默认情况下是私有的,struct结构体数据成员默认公有。
  5. C++代码块中可以有空类和空结构体,而C语言中不允许,并且C没有类。
  6. 对class类的私有成员访问,通常采用公有的方法,比如利用构造函数初始化私有数据成员。
  7. 析构函数仅且只有一个,这与构造函数不同,构造函数可以重载;且析构函数无任何参数、无返回值类型。
  8. 在class类中,通常利用构造函数,以参数列表形式对私有数据成员进行初始化。
  9. 对象初始化对象,要调用拷贝构造函数,且该构造函数参数按对象的引用,不能按值传递。
  10. 赋值语句,调用赋值函数;对象初始化对象,调用拷贝构造函数。
  11. 初始化和赋值的关键性区别在于:是否对已存在对象进行操作?如下面:int a=10; // 初始化    int a; a=10;  //赋值
  12. 类的静态成员不属于任何对象,为所有对象共享,其初始化在类外实现。class Test{static int data;}int Test::data=10;且调用格式:Test::data。
  13. 类的静态成员方法可以访问类的静态成员,不可以访问类的普通成员;类的普通方法,既可以访问类的私有普通数据成员,也可以访问静态成员。因为类的普通方法中存在this指针,而静态方法和静态数据成员不存在this指针。
  14. 思考:赋值语句为什么参数是按引用传递?赋值语句为什么是按引用传递的const?
    返回自身对象时,什么时候应该按引用返回?按引用返回,能够节省时间和空间,但是不能按引用返回将要析构掉的临时变量。关键是:对象是否受到函数的限制,比如将要析构掉的临时对象,都被析构掉了,按引用返回肯定是随机值,程序异常!按引用返回,既节省了时间和空间,又不创建临时对象(它会调用拷贝构造函数)。
  15. 类方法 void fun(const Test &t) const; /* 第一个const限制Test类对象的引用不改变原有的对象,起保护作用,且按引用传递高效率节省空间;第二个const修饰的fun方法为常方法,它限制fun方法不能对类的数据成员进行任何修改,要修改数据就不能把方法设置成常方法*; /
  16. int a1 = 2;
    const int &b1 = a1;// right
    
    const int a2 = 2;
    &b2 = a2; // wrong
    
    const int a3 = 3;
    const &b2 = a2; // right
    因为a2是整型常量,其值不能被改变,而b2对a2进行引用,不是常引用,可能会造成a2值的改变,编译器不允许!a1,b1为整型常量。
  17. class Test
    {
    public:   
    	static void show(){ 
    		count = x; 
    		data = x; 
    		list(); 
    	}
    	void list(){
    		show(); // yes                                                                                                                                     
    		cout<<"This is list()"<<endl;
    	}
    		void list() const{
    			cout << "This is list() const" << endl;
    		}                                                                                        
    private: 
    	int data; 
    	static int count;
    }
    其中void list(); // void list( Test *const this ) | void list() const;// void list( const Test *const this)| 思考:为什么static void show()函数体中为什么data=x;和list();不正确?关键在于 static函数中没有this指针,而普通 函数存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值