C++ Primer Plus 第六版笔记

关于对象声明的思考

转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html

C++中定义对象的语法,带括号与不带括号有什么区别?

  1. #include <iostream>
  2. class MyClass
  3. {
  4. public:
  5. MyClass()
  6. {
  7. std::cout << "Hello MyClass!" << std::endl;
  8. }
  9. public:
  10. void MyMethod()
  11. {
  12. std::cout << "Hello MyMethod!" << std::endl;
  13. }
  14. };

如果这样定义对象:MyClass obj; 那么它的构造函数将会被执行,如果调用obj.MyMethod();也会执行正确。
可是如果带有括号:MyClass obj(); 那么它的构造函数不会被执行,调用obj.MyMethod();也会出现语法错误,请问这种语法是把obj定义成什么了?

MyClass obj()把obj定义成什么 从语法上看是定义了一个名为obj,类型为MyClass类(也就是返回值为MyClass类型)的无参数函数。

另外如果进行动态的堆分配的话是要带括号的,比如 MyClass *obj = new MyClass() 不加会报错(但是,在vc6.0中不加()并没有报错,而且结果是一样的,原因待解?但是有一条,如果类中定义了带参数的构造函数,定义类时不用括号肯定是错误的#add  为避免错误,统一加括号为妙)

时间: 2024-08-12 19:13:17

C++ Primer Plus 第六版笔记的相关文章

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st

c++ primer plus 第六版程序清单16.8 vect2.cpp 手打源码编译错误!!!

坚持手打源码,编译运行,但未每个程序均进行单步调试,昨天在VS2017上手打c++ primer plus 第六版程序清单16.8 vect2.cpp后编译出错: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

《C++ Primer Plus 第六版》读书笔记

CH1-3:处理数据 1 列表初始化 char c={31325}:不允许缩窄 char c={66}; char c={x}:不能为变量 2 强制类型转换 (typename) value typename (value) static_cast<typename> (value) 更加严格 CH4:复合类型 1 string类 strcpy(charArray, stringStr);//字符串拷贝到字符数组,注意大小 strcat(charArray, stringStr);//字符串添

读JavaScript权威指南(第六版)笔记(第五章)

语句 表达式在JavaScript中是短语,那么语句就是JavaScript整句或命令.用句号作结尾来分隔语句.表达式计算出一个值,但语句用来执行以使某件事发生. 5.2复合语句和空语句 复合语句:用花括号把多条语句括起来形成符合语句. { x = Math.PI; cx = Math.cos(x); ................... } // 第一,语句块的结尾不需要分号 //第二,语句块中的行都有缩进 空语句:包含0条语句的语句.空语句就一个分号  //  : JavaScript解释

C++ Primer Plus第六版编程练习---第3章 处理数据(未完待续)

1. #include <iostream> const int CONVER_FACTOR = 12; int main(int argc, char* argv[]){ int height = 0; std::cout << "Pleas enter your height with inch_ "; std::cin >> height; if(0 > height) { std::cout << "Pleas e

C++ Primer Plus第六版编程练习---第4章 复合类型

1. #include <iostream> int main(int argc, char* argv[]){ char firstName[50] = {0}; char lastName[50] = {0}; char grade; int age; std::cout << "What is your first name? "; std::cin.getline(firstName, 49); std::cout << "What

C++ Primer Plus第六版编程练习---第5章 循环和关系表达式

1. #include <iostream> int main() { int startNum = 0; int endNum = 0; std::cout << "please enter tow num:" << std::endl; std::cin >> startNum; std::cin >> endNum; long long sum = 0; for(int i = startNum; i <= end

C++ Primer Plus第六版编程练习---第6章 分支语句和逻辑运算符

1. 1 #include <iostream> 2 #include <string> 3 #include <cctype> 4 5 int main() 6 { 7 std::string inputStr; 8 std::cout<<"Enter your character list. enter @ to end." << std::endl; 9 char ch; 10 std::string srcStr; 1

c++ primer(第五版)学习笔记及习题答案代码版(第六章)函数

笔记较为零散,都是自己不熟悉的知识点. 习题答案至于一个.cc 中,编译需要包含Chapter6.h头文件. 需要演示某一题直接修改 #define NUM***, 如运行6.23题为#define NUM623: chapter 6 1. 形参初始化的机理与变量初始化一样. 当形参是引用类型时,它对应的实参被引用传递或者函数被传引用调用. 2. const和实参 void fcn(const int i){ /*fcn能够读取i,但是不能向i写值*/} void fcn(int i){ /*.